浅析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