300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Java多线程之可见性与原子性——synchronized VS volatile

Java多线程之可见性与原子性——synchronized VS volatile

时间:2022-12-05 05:47:18

相关推荐

Java多线程之可见性与原子性——synchronized VS volatile

<转:/uniquewonderq/article/details/48113071>

程序举例:

代码:

[java]view plaincopy packagecom.synch;publicclassSynchronizedDemo{//共享变量privatebooleanready=false;privateintresult=0;privateintnumber=1;//写操作publicsynchronizedvoidwrite(){ready=true;number=2;}//读操作publicsynchronizedvoidread(){if(ready){result=number*3;}System.out.println("result的值为:"+result);}//内部线程类privateclassReadWriteThreadextendsThread{//根据构造方法中传入的flag参数,确定线程执行读操作还是写操作privatebooleanflag;publicReadWriteThread(booleanflag){this.flag=flag;}@Overridepublicvoidrun(){if(flag){//构造方法中传入true,执行写操作write();}else{//构造方法中传入false,执行读操作read();}}}publicstaticvoidmain(String[]args){SynchronizedDemosynDemo=newSynchronizedDemo();//启动线程执行写操作synDemo.newReadWriteThread(true).start();//try{//Thread.sleep(1000);//}catch(InterruptedExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}//启动线程执行读操作synDemo.newReadWriteThread(false).start();}}

代码示例:

[java]view plaincopy packagecom.synch;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclassVolatileDemo{privateLocklock=newReentrantLock();privateintnumber=0;publicintgetNumber(){returnthis.number;}publicvoidincrease(){try{Thread.sleep(100);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}lock.lock();try{this.number++;}finally{lock.unlock();}}/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubfinalVolatileDemovolDemo=newVolatileDemo();for(inti=0;i<500;i++){newThread(newRunnable(){@Overridepublicvoidrun(){volDemo.increase();}}).start();}//如果还有子线程在运行,主线程就让出CPU资源,//直到所有的子线程都运行完了,主线程再继续往下执行while(Thread.activeCount()>1){//让所有的子线程都执行完后,然后再执行<prename="code"class="java">//System.out.println("number:"+volDemo.getNumber());语句。因为主线程算一个。当活跃线程为1时,也就是所有的子线程执行完毕了。此///时退出while循环执行输出语句。 Thread.yield();}System.out.println("number : " + volDemo.getNumber());}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。