20175204 张湲祯 2018-2019-2《Java程序设计》第十周学习总结

20175204 张湲祯 2018-2019-2《Java程序设计》第十周学习总结

教材学习内容总结

-第十二章:Java多线程机制要点:

一、线程的概念

1.线程(thread)就是进程中的一个执行线索,Java虚拟机允许进程中同时执行多个线程,每个线程都有一个优先级,具有较高优先级的线程先执行。
2.线程是操作系统分配 CPU 时间的基本实体,每一个应用程序至少有一个线程,也可以拥有多个线程,线程是程序中的代码流,多个线程可以同时运行并能共享资源。
3.线程与进程不同,每个进程都需要操作系统为其分配独立的地址空间,而同一进程中的各个线程是在同一块地址空间中工作。

二、线程的控制与调度

1.线程存在一个生命周期,由以下方法体现:
(1) start()方法:启动一个线程。
(2) run()方法:定义该线程的动作。
(3) sleep()方法:使线程睡眠一段时间,单位为ms。
(4) suspend()方法:使线程挂起。
(5) resume()方法:恢复挂起的线程。
(6) yield()方法:把线程移到队列的尾部。
(7) stop()方法:结束线程生命周期并执行清理工作。
(8) destroy()方法:结束线程生命周期但不做清理工作。
2.线程有新建、运行、中断和死亡四种状态
有4种原因的中断:
(1)JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态
(2)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态
(3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态
(4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞

三、 线程间的同步

在大多数实际运行多线程的应用程序中,俩个或多个线程需要共享地访问一 个对象,如果每个线程都调用一个方法,修改对象的状态,那么这俩个线程 互相影响对方的运行,从而使程序的运行结果不可预知或失去可再现性。因 此在实际的应用中,必须线程访问的资源加以限制,阻止其他线程的某一操 作直到本线程完成操作,这就称为同步。

四、 线程间的通信

当一个线程在工作时,它可能需要其他线程进行协调工作,为了协调俩个线 程,特别是在一个线程使用另一个线程输出时,可以使用wait()方法、noify ()和noifyAll()方法。

五、线程的常用方法

1.start()方法:只有新创建的线程才可以调用该方法。
2.run()方法:该方法是否运行结束是判断线程是否结束的一个重要标准。只有当该方法运行结束后,线程才能再次调用start()方法。
3.sleep(int millsecond)方法:线程可以调用该方法来使程序进入睡眠,知道过了参数指定的秒数过后才“醒来”。该方法必须在try-catch语句中调用,因为线程如果在休眠中被打断,会抛出InterruptedException异常。
4.isAlive()方法:该方法用来判断线程是否正在运行,若是,返回true,若不是,返回false。注意,一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体。
5.currentThread()方法是Thread类中的类方法,返回当前使用CPU的线程。
6.interrupt()方法用来“唤醒”调用sleep方法而处于睡眠状态的线程。

六、协调同步的线程

当一个线程使用的同步方法中用到了某个变量,而此变量又需要其他线程修改后才能符合本线程的要求,则可以使用wait()方法来中断线程的执行,并允许其他线程使用这个同步方法(sleep方法是做不到这个功能的)。若有线程在运行同步方法时不需要等待,那么需要在用完方法的同时应用notifyAll()方法来通知其他所有处于等待的线程结束等待。只有在同步线程中才可以使用wait(),notify(),notifyAll()方法。

七、守护线程

线程默认是非守护线程,线程在运行之前必须设置自己是否为守护线程。可以调用voidsetDaemon(boolean on)来将自己设置成一个守护线程。当所有非守护线程运行结束时,守护线程一定会跟着结束。


-代码托管(https://gitee.com/zyzgl/zyz)

posted @ 2019-05-05 15:05  20175204张湲祯  阅读(87)  评论(0编辑  收藏  举报