`
ljyyanyan
  • 浏览: 5684 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

第九章 多线程

 
阅读更多

 

 

 

第九章   多线程

一、进程与线程:

                 ①进程:程序的一次动态执行过程

                 ②线程:程序的运行流程,是进程的进一步划分

                 ③多线程:并发机制的一种有效手段,可以同时运行对个

                                   程序块

 

二、Java中线程的实现:

                 ①继承Thread类:

                            1、定义格式:   class 类名称 extends Thread{

       属性;

       方法;

       public void run(){

       线程主体;

}

}

                            2、启动线程:   start方法(不能直接调用run方法)

                                                        例:MyThread mt = new MyThread(“线程”)

                                                                             mt.start();

                            3、注意事项:start方法只能调用一次,否则会抛出

                                  IllegalThreadStateException”异常

                 ②实现Runnable接口(更优):

                            1、定义格式:   class 类名称 implements Runnable{

       属性;

       方法;

       public void run(){

       线程主体;

}

}

                            2、启动线程:   Thread类中的start方法

                                                        例:MyThread mt = new MyThread(“线程”)

                                                                             Thread t = new Thread(mt)

                                                                             t.start();

 

                            3、注意事项:Thread类中提供了public Thread

                                  (Runnable target)public Thread(Runnable

                                  targetString name)两个构造方法接收Runnable

                                  的子类实例对象

                 Thread类和Runnable接口:

                            1Thread类也是Runnable接口的子类

                            2、实现Runnable接口适合多个相同程序代码的线

                                  程去处理同一资源的情况

                            3、实现Runnable接口可以避免由于Java单继承特

                                  性带来的局限

                            4、实现Runnable接口增强了程序的健壮性,代码

                                  能够被多个线程共享,代码与数据是独立的

 

 

三、线程的状态:

                 ①创建状态:Thread类的构造方法;处于不可运行状态

                 ②就绪状态:start方法;处于排队等待状态

                 ③运行状态:自动调用run方法;就绪状态的线程被调用

                                       并获得处理器资源

                 ④堵塞状态:sleep方法、suspend方法、wait方法;人为

                                       挂起或需要执行耗时的输入输出操作时,堵

                                       塞消除后,可转入就绪状态

                 ⑤死亡状态:stop方法;人为调用stop方法或run方法执

                                       行结束后,不具有继续运行能力

 

 

四、线程操作的相关方法

                 ①取得和设置线程名称:getName()setName()

                            1、一般在启动线程前设置名称,也允许为正在运行

                                  的线程设置名称

                            2、允许两个线程对象同名,但应尽量避免这种情况

                            3、无名线程系统会自动分配名称“Thread-Xx

                 ②判断线程是否启动:isAlive();判断线程是否启动而且仍

                                                    在运行

                 ③线程的强制运行:join();强制运行期间,其他线程无法

                                                  运行,必须等到此线程完成之后才可

                                                  以继续执行

                 ④线程的休眠:sleep()

                 ⑤中断线程:interrupt()

                 ⑥后台线程:setDaemon()java进程结束,后台线程也可

                                       以继续执行

                 ⑦线程的优先级:setPriority();优先级越高的线程越有可

                                              能被先执行,但不一定先执行,要看CPU调度

                            1MAX_PRIORITY : 10

                            2NORM_ PRIORITY : 5(主方法为此优先级)

                            3MIN_PRIORITY : 1

                 ⑧线程的礼让:yield();操作暂时让给其他线程

                 ⑨线程的等待与唤醒:wait()notify()

                 PS

1Runnable接口的子类对象直接调用run方法,是

                                  主方法的线程运行

                            2Java程序运行至少启动两个线程:main线程和

                                  垃圾收集线程

                            3、主线程有可能比其他线程先执行完,此时其他线

                                  程不会受到任何影响

 

 

五、同步与死锁

                 ①同步:多个操作在同一个时间段内只能有一个线程进行

                 ②同步方法:

                            1、同步代码块:     synchronized(同步对象){

需要同步的代码;

}

                            2、同步方法:synchronized 方法返回值方法名称(参数列表){

         方法体;

}

                 ③死锁:两个线程都在等待对方先完成,造成了程序停滞

                 PS1、过多的同步有可能产生死锁

                            2Java中方法定义的完整格式:

                                  访问权限 [final][static][ synchronized] 返回值类型方法名称(

                                                 数类型参数名称…)[throws Exception1, Exception2]{

              [return [返回值|返回调用处]]

}

 

 

六、线程的生命周期

 

 



  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics