java第十章:多线程

程序:封装了一定的代码集合,比如QQ,word都是应用程序;

进程:就是正在运行的应用程序,是cpu分配资源的最小单位;进程之间的切换,内存开销比较大;一个进程可以有多个线程,有自己独立的内存空间

线程:轻量级的进程,是任务调度和执行的基本单位;线程之前的切换,开销小,依赖于进程。

怎么创建线程:

方式一:继承java.lang.Thread类,重写run()方法

方式二:实现java.lang.Runnable接口,重写run()方法/建议使用这一种,因为在java中是单继承,多实现的,一旦继承了一个父类,将无法再继承其他父类;

启动线程用的是start()方法,而不是调用run()方法

Thread类中常用的方法:

getName();setName();getId();

getCurrentThread()--->返回对当前正在执行的线程对象的引用。sleep()和 join()

yield()--->让出时间片;stop()--->已过时,不建议使用,让线程进入死亡状态;

 

Proxy:代理模式,其实就是实现多态;

 

线程的生命周期:

1.新生状态:new Thread();cpu已经分配内存空间

2.就绪状态:调用strat()方法,具备运行条件!cpu尚未分配时间片

3.运行状态:执行run()方法

4.阻塞状态:遇到sleep()、IO阻塞、join()等

5.死亡状态:线程正常结束,或出现异常,或遇到stop()方法

 

线程的同步:使用synchronized关键字,加锁!避免对线程在抢占同意资源时,出现数据不安全,无效的情况!

方式一:监视器,synchronized(Obj/this){          方式二:同步方法,使用synchronized修饰的方法

     //代码块

    }

 

Timer类:计时器,继承TimerTask类,重写run()方法,使用schedule()--->调度器方法,按一定的时间规则自动启动线程;

 

线程间的通讯:三个方法wait()---->在其他线程中调用notify()方法之前,一直处于等待状态!;notify();notifyAll();

 

生产者和消费者模式:实现多线程通讯的经典案例!

 

posted @ 2017-06-19 21:54  赵鹏达  阅读(176)  评论(0编辑  收藏  举报