多任务处理有两种类型:
1、进程:指代一个独立的运行程序,独立的内存地址空间,CPU在进程间来回切换
2、线程:进程内部的一个运行分支,同一个进程中的线程共享内存地址空间,CPU在线程间也是来回切换,线程的切换比进程切换效率高
创建和启动线程:
1、实现方式1 : 继承Thread类,并重写run方法,在run方法中写入要执行的代码
需调用start方法启动线程,由start方法调用run方法,如果直接调用run方法则没有
开启线程
2、实现方式2 : 实现Runnable接口,重写run方法,在run方法中写入要执行的代码
线程状态:
一、新建 ----new Thread
二、就绪 ----调用start(),在start()调用run()之前
三、运行 ----run()执行期间
四、中断 ----在run()执行期间,该线程没有被CPU执行的时间
中断原因:
1、没有抢到CPU
2、阻塞
3、休眠 Thread.sleep(休眠的毫秒数);
4、等待—唤醒 wait()等待,notify()唤醒,notifyAll()唤醒所有
5、挂起 yield();
注意:1、中断结束之后线程会去抢夺CPU,如果没抢到则继续中断
2、默认情况下,所有线程优先级一样
Thread类的setPriority()可以设置线程优先级,默认值都为5,最高10级,最低1级,优先级高则代表被CPU选中的几率高,不一定都是先执行的
五、死亡 ----run()执行结束之后,回收资源
线程安全性:
线程同步:关键字synchronized
1、同步方法:一次只能被一个线程使用,该线程没有执行完,其他线程只能等待。
在资源类的方法中加关键字synchronized
2、同步块:
死锁:
当两个线程循环依赖于一对同步对象时将发生死锁。
线程间通讯:
wait();
notify();