多线程

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();
   }
     }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值