1.问题:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
2.什么是线程同步
即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作。
synchronized
3.同步代码块
几个概念:
共享数据、
同步监视器:由一个类的对象来充当。哪个线程获取此监视器,谁就执行大括号里被同步的代码。俗称:锁
-
每个对象都对应与一个可称为”互斥锁“的标记,这个标记用来保证在同一时刻,只能有一个线程访问该对象。
-
同步的局限性:导致程序的执行效率要降低。
-
同步方法(非静态的)的锁为this。
-
同步方法(静态的)的锁为当前类本身。
单例懒汉式
package com.roocon.thread.t5;
public class Singleton2 {
private Singleton2(){
}
private static Singleton2 instance;
public static synchronized Singleton2 getInstance(){
if(instance == null) {
synchronized (Singleton2.class){
if (instance == null){
instance = new Singleton2();
}
}
}
return instance;
}
}