多线程

来源:互联网 发布:女生滴风油精知乎 编辑:程序博客网 时间:2024/06/16 03:02
多线程


一、线程的创建
1、继承Thread类
2、实现Runnable接口
    在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
    避免单继承的局限,一个类可以继承多个接口。
    适合于资源的共享

二、线程的生命周期


三、线程的调度
          有两种调度模型:分时调度模型抢占式调度模型
         分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片。
 java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

四、线程的同步
          线程同步:就是在同一时刻,只能被一个对象来使用
         我们可以想象某一共享资源是一间屋子,每个人都是一个线程,当A希望进入房间时他必须获得门锁,一旦A获得门锁,他进去后就立刻将门锁上,于是B,C,D...就不得不在门外等待,直到A释放锁出来后,B,C,D...中的某一人抢到了该锁(然后进屋又将门锁上,这样,任一时刻最多有一人在屋内(使用共享资源)。

五、线程的通信
     可参考参考:http://www.cnblogs.com/hapjin/p/5492619.html
    ①同步
       这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。这种方式,本质上就是“共享内
  存”式的通信。多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。
    ②while轮询的方式
        在这种方式下,线程A不断地改变条件,线程ThreadB不停地通过while语句检测这个条件(list.size()==5)是否成立,从而实现了线程间的通信。但是这种方式会浪费CPU资源。之所以说它浪费资源,是因为JVM调度器将CPU交给线执行时, 它没做啥“有用”的工作,只是在不断地测试 某个条件是否成立。就类似于现实生活中,某个人一直看着手机屏幕是否有电话来了,而不是: 在干别的事情,当有电话来时,响铃通知TA电话来了。
     ③wait/notify机制
     ④管道通信