/*日志名格式 年_月_日_内容 如2015_1_19_面向对象*/
*******************************************************************************
日期:2015年1月 29日
主题:Thread线程
相关文件夹:oracle/相关课件/第11章_多线程.pptx
使用软件:Eclipse
*******************************************************************************
上午
*******************************************************************************
一、Thread类
l 构造方法
Ø Thread():创建新的Thread对象
Ø Thread(String threadname):创建线程并指定线程实例名
Ø Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法
Ø Thread(Runnable target, String name):创建新的Thread对象
1. 创建线程的两种方式
继承Thread类
实现Runnable接口
2. 实现Runnable接口的好处
1)避免了单继承的局限性
2)多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份 资源。
3.Thread类的有关方法
l void start(): 启动线程,并执行对象的run()方法
l run(): 线程在被调度时执行的操作
l String getName(): 返回线程的名称
l void setName(String name):设置该线程名称
l static currentThread(): 返回当前线程
l static void yield():线程让步
Ø 暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
Ø 若队列中没有同优先级的线程,忽略此方法
l join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到join() 方法加入的join 线程执行完为止
Ø 低优先级的线程也可以获得执行
l static void sleep(long millis):(指定时间:毫秒)
Ø 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
Ø 抛出InterruptedException异常
l stop(): 强制线程生命期结束
l boolean isAlive():返回boolean,判断线程是否还活着
4. 多线程程序的优点:
背景:只使用单个线程完成多个任务(调用多个方法),肯定比用多个线程来完成用的 时间更短,为何仍需多线程呢?
多线程程序的优点:
- 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
- 提高计算机系统CPU的利用率
- 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
二、线程的分类
Java中的线程分为两类:一种是守护线程,一种是用户线程。
l 它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。
l 守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用户线程变成一个守护线程。
l Java垃圾回收就是一个典型的守护线程。
l 若JVM中都是守护线程,当前JVM将退出。
*******************************************************************************
下午
*******************************************************************************
一、互斥锁
l 在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。
Ø 每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。
Ø 关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。
Ø 同步的局限性:导致程序的执行效率要降低
Ø 同步方法(非静态的)的锁为this。
Ø 同步方法(静态的)的锁为当前类本身。
二、 线程通信
l wait() 与 notify() 和 notifyAll()
Ø wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候再次对资源的访问
Ø notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
Ø notifyAll ():唤醒正在排队等待资源的所有线程结束等待.
l Java.lang.Object提供的这三个方法只有在synchronized方法或synchronized代码块中才能使用,否则会报java.lang.IllegalMonitorStateException异常
注:相关例子请查看博客中的Java模拟生产者消费者问题一文。