下一篇: 并发编程的基础
什么是线程安全
从图中可以看出线程安全只要包括变量在多个线程之间共享、生命周期内状态可以改变、最后结果和预期一致,就是线程安全的。
Synchronized的三种使用方式
1.普通同步方法(实例方法)锁是当前实例对象,进入同步代码前要获得当前实例的锁
2.静态同步方法,锁是当前类的class对象,进入同步代码前要获得当前类对象的锁
3.同步方法块,锁是括号里面的对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
作用在实例方法
- 多个线程访问同一个对象的同一个synchronized方法
public class SynchronizedTest implements Runnable{
static int i = 0;
/**
* 修饰实例方法
*/
public synchronized void increase(){
System.out.println("测试:"+Thread.currentThread().getName()+",i="+i++);
}
@Override
public void run() {
for(int j = 0;j < 10; j++){
increase();
}
}
public static void main(String[] args) throws InterruptedException {
SynchronizedTest synchronizedTest = new SynchronizedTest();
Thread t1 = new Thread(synchronizedTest);
Thread t2 = new Thread(synchronizedTest);
t1.setName("线程1");
t1.start();
t1.join();
t2.setName("线程2");
t2.start();
t2.join();
System.out.println