线程
线程状态图:
线程同步机制:synchronize
1.同步方法:写方法的时候在限制符后面跟一个synhronize
- 如果方法是一个静态的(static)方法,则synchronize的锁加在方法上(当前类.class)。
- 如果是非静态的,锁加在当前调用该方法的类上(this),也可以是其他的对象上(要求是同一个对象Object)。
2.同步代码块(尽量采用此形式,因为范围小):
同理,代码块在静态方法中,锁加在方法上(当前类.class)
sychronize(当前类.class){
代码;
}
代码块在非静态方法中,锁加在this或者object上
//Object obj = new Object();
sychronize(this/object){
代码;
}
为什么要求是同一个对象?
锁在对象上,如果是不同的对象,那么都只锁了自己的锁但是别人还是可以打开,就不能实现同步了。
创建一个线程
//1. 写一个类继承 Thread 类, 该类就可以当做线程使用,然后重写 run 方法即可
//2.创建 Thread 对象,把(实现了 Runnable接口的类)的对象,放入Thread之后调用start
Thread Thread thread = new Thread(dog);
thread.start();