一、线程进程介绍:javascript
程序:指令和数据的有序集合,静态概念; java
进程:执行程序的一次执行过程,一个动态概念,是系统资源分配的单位;spa
线程:cpu调度和执行的过程,是独立的执行路径。线程
他们之间的关系:一个进程能够包含多个线程,至少一个线程。3d
二、建立线程:code
A、继承Thread类,重写run()方法;对象
B、实现Runnable接口,实现run()方法;blog
C、实现Callable接口继承
三、线程状态接口
大体过程:new一个Thread后线程对象进入了新生状态,当调用start()方法后,线程当即进入了就绪状态,可是并非必定当即调度执行;调度后进入了运行状态,这时候线程才执行线程内的代码;当运行时调用sleep、wait或同步的锁定时,线程就进入了阻塞状态,只有当阻塞事件解除后从新进入就绪状态等着cpu调度执行。完成全部代码后或者中断那么线程进入死亡状态,没法再次启动此死亡线程。
Java线程的状态有如下几种:
run()
方法的Java代码;sleep()
方法正在计时等待;run()
方法执行完毕。四、中断线程
A、
B、sleep会使当前线程阻塞;时间到达后进入就绪状态。每个对象都有一个锁,sleep不会释放锁。
C、Join会合并线程,插入后只有出入的线程执行完成后,才会执行其余线程,其余线程会阻塞。
D、在run()中使用Thread.yield()会使线程执行到此刻礼让,可是不阻塞只是暂停。此刻cpu从新调度,可是礼让不必定成功,取决于cpu再次调度了谁。
五、守护线程
线程有用户线程和守护线程。虚拟机确保用户线程执行完毕,可是不用等待守护线程执行完毕。
在调用start()
方法前,调用setDaemon(true)
把该线程标记为守护线程:
Thread t = new MyThread(); t.setDaemon(true); t.start();
六、线程优先级
七、线程同步
有两种此关键字用法。
A、synchronized方法
在方法加此关键字
B、synchronize块
比较:
八、lock
九、线程通讯
生产者消费者问题