并发编程002 --- 线程的基本使用

线程状态

1、OS层面

      初始状态----可运行状态-----运行状态-------阻塞状态-------终止状态

2、java语言层面

      初始状态----运行状态-------等待状态------限时等待状态-------终止状态

      java语言层面,无法区分线程是可运行还是运行(OS层面的状态)

基本使用 --- 创建、运行、休眠、让步

1、创建

继承Thread类,并重写run方法;实现Runnable接口类;创建后进入初始状态

2、运行

Thread类的start方法;进入运行态

3、休眠

sleep方法,进入阻塞态,线程休眠期间,任意线程可获得执行权,超时后,重新等待CPU调度。

4、让步

yield方法,只是让当前线程暂停,不会进入阻塞态,期间,只有相同优先级或者更高优先级的线程可获得执行权。

从源码即可看出sleep和yield的区别,sleep会抛出InterruptedException异常,而yield不会。

等待通知 --- wait、notify、notifyAll

wait、notify和notifyAll方法并不是Thread类提供的方法,而是Object类提供的方法

wait方法:使当前执行代码的线程进行等待,并且将该线程放入等待队列中,直到被其他线程通知执行;

                 执行条件为:必须获取到该对象的对象级别的锁,而且wait方法必须在同步方法或者同步代码块中执行。

notify方法:通知等待队列上的线程继续执行,执行条件和wait方法相同

notifyAll方法:通知等待队列上的所有线程继续执行,执行条件和wait方法相同

典型示例为生产者、消费者模式

 

上一篇:【C++练习】002-显示唐诗


下一篇:【SMB源码解析系列】——002.RESET中断