Ordinary hut

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

          2009年7月2日

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

          例子:
          1 定義一個(gè)普通對(duì)象
          public class MyObj {
              public String name;
          }
          2 主線(xiàn)程類(lèi),定義MyObj對(duì)象,new兩個(gè)線(xiàn)程
          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)線(xiàn)程1,然后主線(xiàn)程睡眠1秒鐘,再啟動(dòng)2
                  t2.start();
                  
              }

          }
          3 定義線(xiàn)程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)前線(xiàn)程立即卡住,陷入等待
                          System.out.println(TestMain.obj.name);//只有線(xiàn)程再次搶到TestMain.obj的鎖后,才會(huì)運(yùn)行
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }

          }
          4 線(xiàn)程2:
          public class Test2 implements Runnable{

              @Override
              public void run() {
                  
                  synchronized (TestMain.obj) { //當(dāng)線(xiàn)程1釋放這個(gè)對(duì)象的鎖時(shí),本線(xiàn)程立即得到
                      TestMain.obj.name = "2"; //改值
                      TestMain.obj.notify();//通知占用了TestMain.obj且當(dāng)前是等待的線(xiàn)程(線(xiàn)程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í)線(xiàn)程1被喚醒,會(huì)打印出7
                  }
              }

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


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

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


          每個(gè)地區(qū)都有自己的本地時(shí)間,在網(wǎng)上以及無(wú)線(xiàn)電通信中時(shí)間轉(zhuǎn)換的問(wèn)題就顯得格外突出。我自己就經(jīng)常混淆于此,特地研究了一下,記錄在此以備忘。
          整個(gè)地球分為二十四時(shí)區(qū),每個(gè)時(shí)區(qū)都有自己的本地時(shí)間。在國(guó)際無(wú)線(xiàn)電通信場(chǎng)合,為了統(tǒng)一起見(jiàn),使用一個(gè)統(tǒng)一的時(shí)間,稱(chēng)為通用協(xié)調(diào)時(shí)(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(shí)(GMT, Greenwich Mean Time)一樣,都與英國(guó)倫敦的本地時(shí)相同。在本文中,UTC與GMT含義完全相同。
          北京時(shí)區(qū)是東八區(qū),領(lǐng)先UTC八個(gè)小時(shí),在電子郵件信頭的Date域記為+0800。如果在電子郵件的信頭中有這么一行:
          Date: Fri, 08 Nov 2002 09:42:22 +0800
          說(shuō)明信件的發(fā)送地的地方時(shí)間是二○○二年十一月八號(hào),星期五,早上九點(diǎn)四十二分(二十二秒),這個(gè)地方的本地時(shí)領(lǐng)先UTC八個(gè)小時(shí)(+0800,就是東八區(qū)時(shí)間)。電子郵件信頭的Date域使用二十四小時(shí)的時(shí)鐘,而不使用AM和PM來(lái)標(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 閱讀(292) | 評(píng)論 (0)編輯 收藏

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

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

               摘要: Camel與cxf  閱讀全文

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

               摘要: XPath記錄  閱讀全文

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

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

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

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

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

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

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

               摘要: maven一些說(shuō)明  閱讀全文

          posted @ 2011-03-04 16:29 landor 閱讀(752) | 評(píng)論 (0)編輯 收藏

          1 分組的時(shí)候,?可以不記錄一些組,比如:
          var str="abc";
          var reg=/(?:a)b(c)/g
          reg.test(str);
          alert(RegExp.$1);//結(jié)果為c
          此時(shí)雖然第一個(gè)小括號(hào)也滿(mǎn)足,但是如果用?:標(biāo)注之后,它不會(huì)被存入正則表達(dá)式的緩存中。

          2 遇見(jiàn)功能,"?=",意識(shí)說(shuō)目標(biāo)串中肯定存在什么,比如:
          var str="ab4";
          var reg
          =/ab(?=\d)/g
          alert(reg.test(str));//結(jié)果為true
          意思是第三位肯定是數(shù)字;
          "?!",意思說(shuō)目標(biāo)串中不應(yīng)該存在什么
          var str="ab1";
          var reg
          =/ab(?!\d)/g
          alert(reg.test(str));//結(jié)果為false
          意思是目標(biāo)串中的第三位不應(yīng)該是數(shù)字。

          posted @ 2011-03-02 16:29 landor 閱讀(1767) | 評(píng)論 (0)編輯 收藏

          1 瀏覽器會(huì)根據(jù)content="text/html; charset=gbk"來(lái)解析該用什么編碼來(lái)把這些字節(jié)流decode成字符串,并顯示;
          2 當(dāng)客戶(hù)端提交表單的時(shí)候,比如以post方式提交,瀏覽器同樣會(huì)根據(jù)上面的編碼,把這些字符串encode成字節(jié)流,發(fā)送到服務(wù)端;
          3 在服務(wù)端,默認(rèn)就會(huì)認(rèn)為傳過(guò)來(lái)的東西就是ASCii碼,沒(méi)別的,也就是ISO-8859-1,所以它就去decode,ISO-8859-1中根本沒(méi)有中文漢字對(duì)應(yīng)的二進(jìn)制碼,沒(méi)找到,就亂了應(yīng)該是一堆口吧;
          4 解決辦法是加一個(gè)過(guò)濾器,比如gbk,那就設(shè)置成request.setCharacterEncoding("GBK");這樣服務(wù)端在獲取字符串的時(shí)候,就用GBK去decode這個(gè)二進(jìn)制流了;
          5 如果是ajax,問(wèn)題又來(lái)了,因?yàn)閍jax只支持utf-8編碼格式,過(guò)程應(yīng)該是這樣:
              a 瀏覽器通過(guò)ajax像server端post數(shù)據(jù)時(shí),ajax自動(dòng)將瀏覽器中的文字用utf-8 encode成二進(jìn)制流,然后發(fā)送到server端;
              b server端如果配置的filter是gbk,那么會(huì)用gbk去decode這個(gè)二進(jìn)制流,顯然亂麻;但是不應(yīng)該是一堆口,因?yàn)樗麘?yīng)該根據(jù)二進(jìn)制流的每?jī)晌蛔止?jié),在GBK編碼表中能找到對(duì)應(yīng)的內(nèi)容,具體的內(nèi)容是簡(jiǎn)體文字還是繁體文字還是其他的,就不一定了;
                  此時(shí)要是偶數(shù)個(gè)漢字還好(可以把它用gbk進(jìn)行encode,然后用utf-8進(jìn)行decode,這樣就還原回來(lái)了),
                  如果是奇數(shù)個(gè)漢字就出現(xiàn)丟失了(因?yàn)橐粋€(gè)字符用UTF-8 encode后為3個(gè)字節(jié),如果三個(gè)字符被encode之后,就是9個(gè)字節(jié),當(dāng)用gbk進(jìn)行decode 的時(shí)候,gbk是用2個(gè)字節(jié),結(jié)果剩下了一個(gè)字節(jié),這個(gè)字節(jié)在gbk的編碼表中不存在(因?yàn)間bk編碼表都是2個(gè)字節(jié)的),所以就用?號(hào)填充了)。
              c 所以必須在服務(wù)端的fiter中對(duì)ajax請(qǐng)求進(jìn)行判斷,用jquery為例:
          $.ajax({
              
              contentType:
          "application/x-www-form-urlencoded;charset=utf-8",

          在server端的filter中,可以判斷charset是不是空,如果加上上面的代碼,那么charset就是utf-8,代碼如下:
          if (request.getCharacterEncoding() == null) {
              request.setCharacterEncoding(this.encoding);//正常提交請(qǐng)求時(shí)候,charset是空的,也就是說(shuō)request.getCharacterEncoding()是空的;
          }

          posted @ 2011-03-02 15:51 landor 閱讀(568) | 評(píng)論 (0)編輯 收藏

               摘要: 用itext生成word  閱讀全文

          posted @ 2010-04-21 15:00 landor 閱讀(3290) | 評(píng)論 (2)編輯 收藏

               摘要: oracle的鎖和事務(wù)的記錄  閱讀全文

          posted @ 2010-02-19 22:23 landor 閱讀(1526) | 評(píng)論 (0)編輯 收藏

               摘要: weblogic集群中獲取jndi的方式  閱讀全文

          posted @ 2010-01-20 21:25 landor 閱讀(1075) | 評(píng)論 (0)編輯 收藏

               摘要: 關(guān)于用spring的JtaTransactionManager,配置分布式事務(wù)  閱讀全文

          posted @ 2010-01-09 13:22 landor 閱讀(17355) | 評(píng)論 (1)編輯 收藏

               摘要: java ee規(guī)范并沒(méi)有實(shí)現(xiàn)事務(wù)的隔離級(jí)別,所以要依靠不同的服務(wù)器廠商來(lái)實(shí)現(xiàn),拿weblogic為例,具體的設(shè)置可以參考官方文檔  閱讀全文

          posted @ 2010-01-07 18:20 landor 閱讀(847) | 評(píng)論 (0)編輯 收藏

               摘要: oracle行列轉(zhuǎn)換  閱讀全文

          posted @ 2010-01-07 11:08 landor 閱讀(597) | 評(píng)論 (0)編輯 收藏

               摘要: classInfoCacheEnabled forceMultipleResultSetSupport errorTracingEnabled defaultStatementTimeout
          statementCachingEnabled  閱讀全文

          posted @ 2009-12-31 13:08 landor 閱讀(1152) | 評(píng)論 (4)編輯 收藏

               摘要: 折線(xiàn)圖的一些詳細(xì)設(shè)置  閱讀全文

          posted @ 2009-12-30 16:48 landor 閱讀(578) | 評(píng)論 (0)編輯 收藏

               摘要: stage nostage external_stage   閱讀全文

          posted @ 2009-12-29 22:39 landor 閱讀(3789) | 評(píng)論 (0)編輯 收藏

               摘要: 通過(guò)javascript的image對(duì)象判斷上傳文件大小  閱讀全文

          posted @ 2009-12-29 08:48 landor 閱讀(1213) | 評(píng)論 (1)編輯 收藏

               摘要: 折線(xiàn)圖-按日期統(tǒng)計(jì)數(shù)據(jù)(處理中文亂碼)  閱讀全文

          posted @ 2009-12-28 14:31 landor 閱讀(1390) | 評(píng)論 (0)編輯 收藏

               摘要: jdbc驅(qū)動(dòng)列表  閱讀全文

          posted @ 2009-12-21 10:25 landor 閱讀(267) | 評(píng)論 (0)編輯 收藏

               摘要: spring中各種切入點(diǎn)指示符
          轉(zhuǎn):http://www.busfly.cn/csdn/post/700.html  閱讀全文

          posted @ 2009-12-04 10:57 landor 閱讀(275) | 評(píng)論 (0)編輯 收藏

               摘要: weblogic啟動(dòng)全局域信任(Enable global trust between domains)和兩個(gè)域的跨域信任(Enable Cross Domain Security between domains),weblogic下載地址  閱讀全文

          posted @ 2009-12-02 10:24 landor 閱讀(1469) | 評(píng)論 (0)編輯 收藏

               摘要: org.springframework.web.util.IntrospectorCleanupListener  閱讀全文

          posted @ 2009-11-26 16:29 landor 閱讀(3184) | 評(píng)論 (0)編輯 收藏

               摘要: spring、hibernate的FlushMode的AUTO、COMMIT、ALWAYS、NEVEL、MANUAL 的區(qū)別,以及和readonly的聯(lián)系  閱讀全文

          posted @ 2009-11-25 22:55 landor 閱讀(5031) | 評(píng)論 (0)編輯 收藏

               摘要: 閱讀全文

          posted @ 2009-11-18 12:40 landor 閱讀(2365) | 評(píng)論 (0)編輯 收藏

               摘要: java.rmi.RemoteException: Transaction Rolledback.; nested exception is:
          weblogic.transaction.internal.TimedOutException: Transaction timed out after * seconds
          BEA1-0015257A156225A3A3CE  閱讀全文

          posted @ 2009-11-06 14:51 landor 閱讀(4944) | 評(píng)論 (0)編輯 收藏

               摘要: 正則表達(dá)式中有三個(gè)量詞:貪婪、惰性、支配,記錄一下我對(duì)貪婪和惰性的理解  閱讀全文

          posted @ 2009-10-30 16:13 landor 閱讀(509) | 評(píng)論 (0)編輯 收藏

               摘要: 在網(wǎng)頁(yè)中嵌入word、excel、pdf的注意事項(xiàng)  閱讀全文

          posted @ 2009-08-21 14:26 landor 閱讀(9931) | 評(píng)論 (1)編輯 收藏

               摘要: 最常用的索引包括:B*樹(shù)索引、位圖索引、位圖聯(lián)合索引、基于函數(shù)索引、應(yīng)用域索引  閱讀全文

          posted @ 2009-08-11 16:51 landor 閱讀(2787) | 評(píng)論 (0)編輯 收藏

               摘要: jdbc關(guān)于對(duì)clob字段的方法setCharacterStream的說(shuō)明
          java.lang.AbstractMethodError: com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V at...  閱讀全文

          posted @ 2009-07-03 15:43 landor 閱讀(3542) | 評(píng)論 (0)編輯 收藏

               摘要: spring+hibernate的幾種數(shù)據(jù)庫(kù)連接配置方式,jdbc proxool c3p0  閱讀全文

          posted @ 2009-07-02 16:57 landor 閱讀(3870) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 河南省| 济宁市| 辽宁省| 卓尼县| 新宁县| 兴山县| 疏勒县| 方正县| 眉山市| 灵武市| 张家川| 东台市| 广昌县| 常山县| 松原市| 北宁市| 赤城县| 丹凤县| 龙山县| 济阳县| 南城县| 德惠市| 静海县| 措美县| 天全县| 荆门市| 酉阳| 蒲江县| 上栗县| 历史| 华容县| 墨竹工卡县| 昌黎县| 樟树市| 钦州市| 和田县| 邯郸县| 蛟河市| 泰来县| 咸宁市| 荔浦县|