同步代码块:用于解决代码安全问题
注意:
1、synchronized要写在循环的里面
2、锁对象一定要是唯一的(锁对象一般用当前的类的字节码文件 类.class)
public class Mythread extends Thread{
//表示这个类所有的对象,都共享num数据
static int num=0;
// static Object obj=new Object();
@Override
public void run() {
while(true){
synchronized (Mythread.class){
if(num<100){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
num++;
System.out.println(getName()+"正在卖第"+num+"张票");
}else{
break;
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
Mythread nt1=new Mythread();
Mythread nt2=new Mythread();
Mythread nt3=new Mythread();
nt1.setName("1号");
nt2.setName("2号");
nt3.setName("3号");
nt1.start();
nt2.start();
nt3.start();
}
}
同步方法:把synchronized关键字加到方法上
格式:修饰符 synchronized 返回值类型 方法名(方法参数){...}
特点1:同步方法是锁住方法里面所有的代码
特点2:锁对象不能自己指定 非静态:this 静态:当前类的字节码文件对象
unlock()写在try...catch方法后的finally里面