多线程
多线程这章理论大于实践,因为在实际开发中多线程的都封装到框架里边了的,程序员一般不会写多线程,多线程属于Java里边比较底层的代码了。
线程是处理器调度的最基本单位
程序>进程>线程
程序是死的,当启动程序得时候会有一个或几个进程,每个进程里边可以有诺干线程。基于线程开销更
创建线程:两种方法
1、声明Thread的子类,重写run方法
class MyThread extends Thread{
public void run(){
}
}
Mythread a = new MyThread();
a.start;
2、实现Runnable接口,实现run方法
class MyThread2 implements Runnable{
public void run(){}
}
Mythread2 b = new MyThread2();
Thread bb = new Thread(b);
bb.start;
调用线程的带实现Runnable接口的有参构造,进行实例化对象
这个方法常用,因为Java单继承,但可以多实现
线程的主要方法:
-start 启动,调用run方法,直接调用run方法相当于普通方法,不是线程
-sleep 暂停,静态的,可以暂停线程多少毫秒
-yield 让出CPU的控制权,让别人先执行,
设置优先级(1-10)10最大,优先级大的并不绝对先执行,也不是先运行完再运行其他
而是抢占的资源多
wait-notify 机制
线程间相互通信
只能用在synchronized里边,
wait:让使用对象的线程停止运行,进入等待,直到另一个使用该对象的线程运行notify
notify:线程在运行中遇到notify,环形使用相同对象的第一个碰到wait的线程
同步块,同步方法
synchronized:
上锁,保护对象,可以是本身或者其他对象,
在运行到同步块或者同步方法的时候,其他对象不能运行这里边代码,必须这个线程运行完之后,其他的才能运行这里边的代码
保证了一些数据的准确性(比如很多个对象同时读写(访问)一个资源)
同步块:可以锁本身对象或者其他对象,块的代码比方法少,减少其他线程的等待时间
同步方法:只能锁本身对象,