<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ordinary hut

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

    2011年3月30日

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

    例子:
    1 定義一個(gè)普通對象
    public class MyObj {
        public String name;
    }
    2 主線程類,定義MyObj對象,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) {//占有對象鎖
                try {
                    TestMain.obj.name="1";
                    System.out.println(TestMain.obj.name); //打印出1
                    TestMain.obj.wait();  //釋放對TestMain.obj對象的鎖,同時(shí)當(dāng)前線程立即卡住,陷入等待
                    System.out.println(TestMain.obj.name);//只有線程再次搶到TestMain.obj的鎖后,才會運(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è)對象的鎖時(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被喚醒,會打印出7
            }
        }

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


    posted @ 2013-04-27 15:23 landor 閱讀(365) | 評論 (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í)間。在國際無線電通信場合,為了統(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í)間是二○○二年十一月八號,星期五,早上九點(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ù)號意味著是前一天, -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 閱讀(296) | 評論 (0)編輯 收藏

         摘要: struts2單獨(dú)使用沒有任何問題,加入spring后,發(fā)現(xiàn)頁面表單可以傳到struts2的action中,但是返回到頁面后,數(shù)據(jù)丟失,  閱讀全文

    posted @ 2012-08-19 23:06 landor 閱讀(1077) | 評論 (0)編輯 收藏

         摘要: Camel與cxf  閱讀全文

    posted @ 2011-09-29 13:50 landor 閱讀(2347) | 評論 (2)編輯 收藏

         摘要: XPath記錄  閱讀全文

    posted @ 2011-09-15 14:49 landor 閱讀(348) | 評論 (0)編輯 收藏

         摘要: JAXB2完成java bean到xml的相互轉(zhuǎn)換  閱讀全文

    posted @ 2011-06-03 12:04 landor 閱讀(7886) | 評論 (1)編輯 收藏

         摘要: Could not parse date - Class: java.text.DateFormat
    Caused by: java.text.ParseException: Unparseable date:  閱讀全文

    posted @ 2011-05-23 15:54 landor 閱讀(1078) | 評論 (0)編輯 收藏

         摘要: 轉(zhuǎn)載 - spring 動(dòng)態(tài)數(shù)據(jù)源切換  閱讀全文

    posted @ 2011-03-30 21:30 landor 閱讀(355) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 日韩亚洲一区二区三区| 亚洲欧洲精品成人久久奇米网 | 亚洲一区在线视频| 免费无码VA一区二区三区| 久久久久亚洲AV片无码| 国产午夜无码精品免费看| 亚洲国产成人片在线观看| 亚洲午夜免费视频| 亚洲女人初试黑人巨高清| 久久精品a一国产成人免费网站 | 蜜芽亚洲av无码一区二区三区| 午夜时刻免费入口| 国产精品自拍亚洲| 浮力影院亚洲国产第一页| 青青操视频在线免费观看| 久久精品国产亚洲AV麻豆网站| 97人妻无码一区二区精品免费| 亚洲熟妇久久精品| 亚洲 另类 无码 在线| 97在线免费视频| 亚洲精品美女久久久久| 最近中文字幕免费mv视频8| 麻豆安全免费网址入口| 亚洲一区二区三区无码中文字幕| 国产免费一区二区视频| 亚洲成a人片毛片在线| 国产乱子伦精品免费女| a毛片在线免费观看| 亚洲三级视频在线| 亚洲av手机在线观看| 国产精品免费观看调教网| 久久国产亚洲精品| 亚洲中文字幕久久精品无码喷水| 最近中文字幕完整版免费高清| 亚洲丰满熟女一区二区哦| 亚洲色成人WWW永久网站| 美女视频黄的全免费视频网站| 国产成人亚洲午夜电影| 亚洲AV美女一区二区三区| 韩国18福利视频免费观看| 在线看片免费人成视频久网下载 |