多线程

xiaoxiao2021-02-28  74

ArrayList和Vector的区别? ArrayList类 ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Vector类 Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。 进程是程序一次执行的动态过程:特点:1.进程是系统运行程序的基本单位                                                      2.每一个进程都有自己独立的一块内存空间                                                      3.每个进程的内部数据和状态都是完全独立的 线程是进程中运算的最小单位 多线程则是一个进程中同时运行多个线程,用来完成不同的工作称为多线程 好处:1.充分利用CPU的资源           2.简化编程模型           3.带来良好的用户体验 创造线程的方法有哪两种? 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 线程的状态有哪几个? 线程的什么方法可以设置线程休眠、线程的强制执行、线程的礼让? 线程的休眠:     Thread.sleep()方法使线程进入休眠,时间为毫秒(ms) 线程的礼让:     当两个及以上的线程运行时,可以用yield()方法将一个线程的操作暂时让给其他线程执行 线程的强制启动

  在线程操作中,可以使用join()方法让一个线程强制启动,在强制启动的线程运行期间,其他线程无法运行,直到被强制启动的线程运行完 线程的休眠:代码: for(int i=0;i<100;i+=10){     try {      Thread.sleep(100);     } catch (InterruptedException e) {      // TODO Auto-generated catch block      e.printStackTrace();     } 线程的礼让: public class MyThread implements Runnable{ public void run(){ for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+"正在运行"+i); if(i==3){ System.out.println("礼让"); Thread.yield(); } } }} }

线程的强制运行: class MyThread implements Runnable { public void run(){ for(int i=0;i<20;i++){ System.out.println(Thread.currentThread().getName() +"运行,i="+i); } } } public class RunnableDemo01 { public static void main(String args[]){ MyThread mt = new MyThread(); Thread t = new Thread(mt,"线程"); t.start(); for(int i=0;i<30;i++){ if(i>10){ try{ t.join(); //线程强制执行 }catch(InterruptedException e){} } System.out.println("Main线程运行:"+i); } } } 线程同步有几种方式? 1.同步方式 2.同步代码块  2.同步代码块格式:     synchronized(同步对象){         需要同步的代码; }     1.synchronized 方法返回值 方法名称(参数列表){} 同步代码块: public void run(){ for(int i=0;i<100;i++){ synchronized(this){ //对当前对象进行同步 if(ticket>0){ try{ Thread.sleep(300); //加入延迟 }catch(InterruptedException e){ e.printStackTrace(); } } } 同步代码: public synchronized void sale(){ if(ticket>0){ try{ Thread.sleep(300); //加入延迟 }catch(InterruptedException e){ e.printStackTrace(); } }

转载请注明原文地址: https://www.6miu.com/read-2400351.html

最新回复(0)