Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          2013年4月22日

          java中wait和notify的簡(jiǎn)單理解
          1 它們都是Object的屬性;
          2 wait:釋放對(duì)象鎖;由于把鎖釋放了,當(dāng)前線程就會(huì)卡住,繼續(xù)再等待獲取鎖的機(jī)會(huì)(也許是干了一半的活后,就把活交出去了,然后等待繼續(xù)干活的機(jī)會(huì));
          3 notify:告訴其中一個(gè)等待的線程(具體哪一個(gè)不知道),我已經(jīng)用完這個(gè)對(duì)象,你可以繼續(xù)用了
          4 它們都要包含在synchronized塊里,只有先鎖住這個(gè)對(duì)象,才能進(jìn)行wait、notify操作;

          例子:
          1 定義一個(gè)普通對(duì)象
          public class MyObj {
              public String name;
          }
          2 主線程類,定義MyObj對(duì)象,new兩個(gè)線程
          public class TestMain {

              public static MyObj obj = new MyObj();
              
              /**
               * 
          @param args
               
          */
              public static void main(String[] args) throws Throwable {
                  new TestMain().myTest();
              }
              
              public void myTest() throws Throwable{
                  Test1 test1 = new Test1();
                  Test2 test2 = new Test2();
                  
                  Thread t1 = new Thread(test1); 
                  Thread t2 = new Thread(test2); 
                  
                  t1.start();
                  Thread.sleep(1000);//啟動(dòng)線程1,然后主線程睡眠1秒鐘,再啟動(dòng)2
                  t2.start();
                  
              }

          }
          3 定義線程1,:
          public class Test1 implements Runnable{

              @Override
              public void run() {
                  synchronized (TestMain.obj) {//占有對(duì)象鎖
                      try {
                          TestMain.obj.name="1";
                          System.out.println(TestMain.obj.name); //打印出1
                          TestMain.obj.wait();  //釋放對(duì)TestMain.obj對(duì)象的鎖,同時(shí)當(dāng)前線程立即卡住,陷入等待
                          System.out.println(TestMain.obj.name);//只有線程再次搶到TestMain.obj的鎖后,才會(huì)運(yùn)行
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }

          }
          4 線程2:
          public class Test2 implements Runnable{

              @Override
              public void run() {
                  
                  synchronized (TestMain.obj) { //當(dāng)線程1釋放這個(gè)對(duì)象的鎖時(shí),本線程立即得到
                      TestMain.obj.name = "2"; //改值
                      TestMain.obj.notify();//通知占用了TestMain.obj且當(dāng)前是等待的線程(線程1)可以繼續(xù),但是必須等到本synchronized塊執(zhí)行完畢。
                      TestMain.obj.name = "3";
                      TestMain.obj.name = "4";
                      
                      try {
                          Thread.sleep(1000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                      TestMain.obj.name = "7";//執(zhí)行完畢,此時(shí)線程1被喚醒,會(huì)打印出7
                  }
              }

          }
          結(jié)果顯示1和7


          posted @ 2013-04-27 15:23 landor 閱讀(367) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)載 http://supertoffy.blog.163.com/blog/static/16447681820116150115743/


          每個(gè)地區(qū)都有自己的本地時(shí)間,在網(wǎng)上以及無線電通信中時(shí)間轉(zhuǎn)換的問題就顯得格外突出。我自己就經(jīng)?;煜诖?,特地研究了一下,記錄在此以備忘。
          整個(gè)地球分為二十四時(shí)區(qū),每個(gè)時(shí)區(qū)都有自己的本地時(shí)間。在國際無線電通信場(chǎng)合,為了統(tǒng)一起見,使用一個(gè)統(tǒng)一的時(shí)間,稱為通用協(xié)調(diào)時(shí)(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(shí)(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時(shí)相同。在本文中,UTC與GMT含義完全相同。
          北京時(shí)區(qū)是東八區(qū),領(lǐng)先UTC八個(gè)小時(shí),在電子郵件信頭的Date域記為+0800。如果在電子郵件的信頭中有這么一行:
          Date: Fri, 08 Nov 2002 09:42:22 +0800
          說明信件的發(fā)送地的地方時(shí)間是二○○二年十一月八號(hào),星期五,早上九點(diǎn)四十二分(二十二秒),這個(gè)地方的本地時(shí)領(lǐng)先UTC八個(gè)小時(shí)(+0800,就是東八區(qū)時(shí)間)。電子郵件信頭的Date域使用二十四小時(shí)的時(shí)鐘,而不使用AM和PM來標(biāo)記上下午。
          以這個(gè)電子郵件的發(fā)送時(shí)間為例,如果要把這個(gè)時(shí)間轉(zhuǎn)化為UTC,可以使用一下公式:
          UTC + 時(shí)區(qū)差 = 本地時(shí)間
          時(shí)區(qū)差東為正,西為負(fù)。在此,把東八區(qū)時(shí)區(qū)差記為 +0800,
          UTC + (+0800) = 本地(北京)時(shí)間 (1)
          那么,UTC = 本地時(shí)間(北京時(shí)間))- 0800 (2)
          0942 - 0800 = 0142
          即UTC是當(dāng)天凌晨一點(diǎn)四十二分二十二秒。如果結(jié)果是負(fù)數(shù)就意味著是UTC前一天,把這個(gè)負(fù)數(shù)加上2400就是UTC在前一天的時(shí)間。例如,本地(北京)時(shí)間是 0432 (凌晨四點(diǎn)三十二分),那么,UTC就是 0432 - 0800 = -0368,負(fù)號(hào)意味著是前一天, -0368 + 2400 = 2032,既前一天的晚上八點(diǎn)三十二分。
          紐約的時(shí)區(qū)是西五區(qū),比UTC落后五個(gè)小時(shí),記為 -0500:
          UTC + (-0500) = 紐約時(shí)間 (3)
          UTC = 紐約時(shí)間 + 0500 (4)

          posted @ 2013-04-22 17:04 landor 閱讀(299) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 泾阳县| 海丰县| 南丹县| 铅山县| 怀仁县| 保德县| 合川市| 军事| 米易县| 昌黎县| 淮安市| 石阡县| 河西区| 岚皋县| 南阳市| 泸西县| 翁牛特旗| 灵璧县| 河南省| 沙雅县| 清徐县| 瑞安市| 象山县| 卓资县| 陇川县| 武功县| 洪雅县| 庐江县| 时尚| 恩平市| 江口县| 兖州市| 穆棱市| 苗栗县| 柳州市| 即墨市| 类乌齐县| 漳平市| 黄龙县| 普兰店市| 南木林县|