多线程

72 阅读1分钟

线程

线程状态图:

image-20230313175348772

线程同步机制: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();