配色: 字号:
《Java面向对象程序设计》11 多线程写字字帖
2023-05-25 | 阅:  转:  |  分享 
  
目标正确理解多线程概念能够区分线程与进程的区别掌握Java中创建线程的两种方式理解线程优先级和死锁的概念掌握线程的同步和通信 概念程序:一段
静态代码,它是应用软件执行的蓝本进程:程序一次动态执行的过程,是程序的最小的代码单位线程:指运行中的程序调度单位线程是进程中的实体
,一个进程可以拥有多个线程,一个线程必须有一个父进程创建线程第一种方式:在java.lang中定义了一个直接从根类Object中派
生的Thread类定义一个名为NewThread的线程 创建线程第二种方式:Runnable接口只包含了一个抽象方法run(),声
明自己的类实现Runnable接口并提供这一方法,将我们的线程代码写入其中 先实现Runnable接口 再通过Thread类的构造
函数实现线程public class Receiver implements Runnable{ public void run(
){ //具体实现 }} 其他线程守护线程(Daemon Thread)它是在后台运行并且为其他线程提供服务的线程,如垃圾
回收器 线程组的机制 使得多个线程集于一个对象内,譬如,能用一个方法调用来启动或挂起组内的所有线程 线程状态 新建状态(New
Thread)就绪状态(Ready) 运行状态(Running) 阻塞状态(Blocking) 直到线程处于停滞状态,才可能被执行
suspend()方法被调用,线程处于挂起状态sleep()方法被调用,线程处于睡眠状态wait()方法被调用,线程处于等待状态
死亡态(Dead) 线程调度和优先级 通过Thread类中定义常量实现, 有三个常量:NORM_PRMIN_PRIORITY
指线程可以具有最低的优先级,常量值为1IORITY 指分配给线程的默认优先级,常量值为5MAX_PRIORITY 指
线程可以具有最高的优先级,常量值为10 使用setPriority(int newPriority)方法更改线程的优先级 (1到
10的范围 )线程同步 当多个线程同时操作同一个资源时,可能会发生混乱。如一个工资系统,当管理员修改工资时,正巧有员工查询工资,这
时将有可能出现错误线程的同步用于线程共享数据,转换和控制线程的执行保证内存的一致性在Java中,运行环境使用锁(Monitor)来
解决线程同步的问题 线程同步Java为每个拥有synchronized方法的对象实例提供了一个锁,为了完成分配资源的功能,线程必
须得到锁当调用同步(synchronized)方法时,该线程就获得了锁,该方法的边界上实行严格的互斥,在同一时刻,只允许一个线程进
入该方法,其他希望进入该方法的线程必须等待 线程同步第一种方法就是调用被synchronized关键字修饰的方法。当一个线程在一个
同步方法内部,所以试图调用该方法的同实例的其他线程必须等待第二种方法定义一个synchronized同步块。synchronize
d public void doTransaction(String trans){ //代码实现}synchronized(ob
ject){ //代码实现}死锁 多个线程同时被阻塞,它们种的一个或者全部在等待某个资源被释放由于线程被无限期地阻塞,因此程
序不可能正常终止导致死锁的根源在于不适当地运用 synchronized关键字来管理线程对特定对象的访问 死锁形成条件 互斥条
件,即资源是不能够被共享的至少一个进程在使用一个资源时却在等待另一个线程所持有的一个资源资源不能够被进程抢占必须有循环的等待 相关
实践 新建名为MailBox的项目,实现一个多线程的例子,在项目中新建mailbox包 在项目中新建类MailBox,用来存储邮件
对象,设置邮件的容量为1,即只能放一封信,发信者等待收信者取走信件后,才可以放入新邮件在项目中新建Sender类,用来定义发信者,
发送邮件到邮箱 在项目中新建类Receiver,用来定义收信者,从邮箱取出邮件 在项目中新建Test测试类 相关实践运行结果 小
结 一个进程中可以同时包括多个线程,也就是说一个程序中同时可能进行多个不同的子流程在Java中要实现线程功能,可以继承java.l
ang.Thread类,并重新定义run()方法除了继承Thread类定义线程类以外,还可以通过实现java.lang.Runna
ble接口来定义含有线程功能的类线程也有完整的生命周期Java线程同步合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能
献花(0)
+1
(本文系大高老师首藏)