实现多线程(两种方法)
1. 继承Thread类
- 每个线程都需要new一个对象
2. 实现Runnable接口
- 可以用一个对象创建多个线程,多个线程执行同一个实例里的run函数
锁(解决公共资源的读写冲突问题
同一个锁同一时间只能被一个线程锁住
class Worker extends Thread {
public static int cnt = 0;
private static final ReentrantLock lock = new ReentrantLock();
# 虽然有多个线程(对象),但是有static修饰,只有一把锁
@Override
public void run() {
for (int i = 0; i < 100000; i ++ ) {
lock.lock();
try {
cnt ++ ;
} finally {
lock.unlock();
}
}
}
}
Synchronized(语法糖,锁的简写方式
写法1:将Synchronized加到代码块上
Integer类似String,不可以修改。给cnt赋值,会new一个新的对象。Synchronized()锁的对象不能变。
一种正确写法: