浅析Java多线程同步synchronized
单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源
代码例子:
publicclassSingleThread{
intnum=10;
publicvoidadd(){
while(num<13){
num++;
try{
Thread.sleep(1000);
}
catch(Exceptione){
System.out.println("中断");
}
System.out.println(num);
}
}
publicstaticvoidmain(String[]args){
Threadthread=Thread.currentThread();//获取当前运行的线程对象
thread.setName("单线程");//线程重命名
System.out.println(thread.getName()+"正在运行");
SingleThreadst=newSingleThread();
st.add();
}
}
多线程安全,synchronized同步代码块
synchronized(对象){};//同步代码块
synchronized返回值方法名(){};//同步方法
classOne{
intnum=10;
publicvoidadd(){
synchronized(this){//同步代码块,同步方法也可以实现效果synchronizedvoidadd(){};
num++;
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
System.out.println("中断");
}
System.out.println(num);
}
}
}
classTwoimplementsRunnable{
Oneone=newOne();
@Override
publicvoidrun(){
one.add();//调用add方法
}
}
publicclassSynch{
publicstaticvoidmain(String[]args){
Twotwo=newTwo();
Threadt1=newThread(two);//创建三个子线程
Threadt2=newThread(two);
Threadt3=newThread(two);
t1.start();
t2.start();
t3.start();
}
}
注意:观察去除synchronized关键字的运行结果区别!
正常运行结果:
11
12
13