中文JAVA技術平等自由協作創造

          Java專題文章博客和開源

          常用鏈接

          統計

          最新評論

          java多線程中測試同步的小程序

            這是我做的一個很簡單的多線程同步程序,目的是為了測試多線程編程下如何使用同步(synchronized)防止產生競爭共享資源的錯誤狀態,從中得到的心得是:一定要將你所共享的變量封裝在一個類中,將所有有關該變量的操作方法都盡可能地封裝在包含該變量的類中,并將所有有關讀取修改該共享變量的方法都設為同步方法,只有這樣才是安全的,并且該變量必須是private類型,主要是為了防止其他對象無意讀取到該變量而使該變量的同步形同虛設!因為你可以不通過同步方法直接對該共享變量進行操作!不說了,下面來看代碼吧!我還在代碼中加了一個計時器類Timer類,這個類可以產生一個后臺線程,專門用于計時到指定時間或延時一定時間就去執行TimeTask線程對象任務雅思答案
           
             package xinyu.shangrao.demo.fucking;
           
             import java.util.Date;
           
             import java.text.ParseException;
           
             import java.util.Timer;
           
             import java.util.TimerTask;
           
             import java.util.concurrent.TimeUnit;
           
             public class ThreadDemoNew {
           
             public static void main(String[] args) throws ParseException {
           
             long counter;
           
             /* Date date = null;
           
             String s = "2013-05-29 上午08:26 ";
           
             SimpleDateFormat sdf = new SimpleDateFormat();
           
             date = sdf.parse(s);
           
             System.out.println("------系統默認無參數Date的parse------");
           
             System.out.println(" " +date.getTime() );
           
             counter=date.getTime();
           
             System.out.println(" " + date ); */
           
             Date tim=new Date();
           
             counter=tim.getTime();
           
             tim.setTime(counter+9000);
           
             new Timer().schedule(new TimerTask(){ //到指定時間就去執行這個指定任務,這里是退出操作
           
             public void run(){
           
             System.out.println("時間到:");
           
             System.exit(0);
           
             }
           
             }, tim );
           
             EventKey ke=new EventKey();
           
             Thread1 demo1=new Thread1(ke) ;
           
             Thread2 demo2=new Thread2(ke) ;
           
             demo1.start();
           
             demo2.start();
           
             }
           
             }
           
             class Thread1 extends Thread{
           
             private EventKey ek;
           
             private int ko;
           
             public Thread1(EventKey e){
           
             ek=e;
           
             }
           
             public void run(){
           
             synchronized(this){
           
             while(true){
           
             ko=ek.next();
           
             System.out.println(Thread.currentThread()+"ko:"+ko);
           
             if(ko % 2 !=0 ){
           
             System.out.println("輸出的是奇數");
           
             System.exit(0);
           
             }
           
             }}}
           
             }
           
             class Thread2 extends Thread{
           
             private EventKey ek;
           
             private int ko;
           
             public Thread2(EventKey e){
           
             ek=e;
           
             }
           
             public void run(){
           
             synchronized(this){
           
             while(true){
           
             ko=ek.next();
           
             System.out.println(Thread.currentThread()+"ko:"+ko);
           
             if(ko % 2 !=0 ){
           
             System.out.println("輸出的是奇數");
           
             System.exit(0);
           
             }
           
             }}}
           
             }
           
             class EventKey implements IntGenerator{
           
             private int i=0;
           
             synchronized public int next(){
           
             i++;
           
             i++;
           
             try{
           
             TimeUnit.MILLISECONDS.sleep(1000);
           
             }catch(InterruptedException e){
           
             System.out.println(e);
           
             }
           
             return i;
           
             }
           
             }
           
             interface IntGenerator{
           
             public int next();
           
             }
           
             現實當中將對共享資源的共有操作方法放在接口或抽象類,這樣在通過繼承抽象類或實現這個接口可以得到更好的效果!這樣代碼也更清晰,更有層次感雅思改分

          posted on 2013-06-09 23:01 好不容易 閱讀(161) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 靖远县| 鸡泽县| 贵州省| 万盛区| 彭州市| 河间市| 泸西县| 含山县| 西昌市| 易门县| 凤翔县| 循化| 夹江县| 亚东县| 小金县| 虞城县| 确山县| 固始县| 瓦房店市| 长丰县| 东城区| 楚雄市| 龙岩市| 宜黄县| 尼勒克县| 宁强县| 长宁区| 垫江县| 达拉特旗| 鄯善县| 扶沟县| 延长县| 库伦旗| 镇康县| 武清区| 闵行区| 临泉县| 三明市| 江西省| 宝清县| 郎溪县|