亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

讓Java程序只運行一個實例

2019-11-18 13:18:53
字體:
來源:轉載
供稿:網友

  一個程序可以在內存里面存在多個運行實例,比如,你可以打開多個微軟的Word程序。但是,有些時候我們需要控制程序運行的實例只有一個,也就是說,該程序同一時刻在內存里面運行的只有一個實例。這樣當這個程序在內存中已經存在一個運行實例而用戶又再次運行了該程序的時候,有兩種結果,第一種結果是結束目前的運行實例,打開新運行的實例;第二種就是讓新運行的實例退出,原有的運行實例繼續運行。
  
  原理
  因為任何時候只有一個實例,所以在實現這種功能的時候必須借助只能被獨享的資源。假如我們的程序是基于某個平臺的,那么就可以借助操作系統的內核對象來完成,比如Windows操作系統就提供了CreateMutex這個API來創建一個獨享的內核對象。但是因為要考慮平臺無關,java程序的實例控制不應該使用系統的內核對象來完成,那么我們就必須找到其它的、可以獨享的資源。實際上,一臺機器無論是在什么操作系統上,網絡端口都是獨享的,也就是說基于網絡端口這個獨享的原理,我們可以很方便地讓我們的Java程序實現在內存里面只有一個運行實例這個功能,而且這個功能的實現是與平臺無關的。
  
  實現
  我們先來看看第一種情況是如何實現的,也就是說假如系統中已經存在運行實例的話,那么結束原有的運行實例,讓新實例運行。這個實現實例控制的Java類也是一個線程,具體的實現如下:
  
  import java.net.*;
  public class InstanceControl extends Thread {
   public void run() {
   try{
    Socket sock = new Socket("127.0.0.1",22222);
  //創建socket,連接22222端口                   
   }
   catch (Exception e)
   {}
   try{
    ServerSocket server = new ServerSocket(22222);//創建socket,在22222端口監聽
    server.accept(); //等待連接
    server.close(); //有連接到來,也就是說有新的實例
    System.exit(0); //這個實例退出
   }catch (Exception e)
   {
    e.PRintStackTrace();
   }
   }
  }
  
  下面這個Java程序的程序入口是沒有實例控制功能的:
  
  public class ProgramMain {
   public static void main(String argv[])
   {
   mainFrame frame = new mainFrame();
   }
  }
  
  現在想加入實例控制,只需要添加兩行代碼,添加后代碼如下所示:
  
  public class ProgramMain {
   public static void main(String argv[])
   {
   InstanceControl ic = new InstanceControl();
   ic.start();
   mainFrame frame = new mainFrame();
   }
  }
  
  在這個基礎上,要實現第二種情況,也就是已經有實例運行的情況下,新的實例退出,保持原有的運行實例,就只需要一點小的改動了。具體的實現如下:
  
  import java.net.*;
  public class InstanceControl2 extends Thread {
   public void run() {
   try{
    Socket sock = new Socket("127.0.0.1", 22222);//創建socket,連接22222端口
    System.exit(0); //連接成功,說明有實例存在,則退出
   }catch (Exception e)
   {}
   try{
    ServerSocket server = new ServerSocket(22222);//創建socket,連接22222端口
    while (true)
    {
    server.accept(); //接受連接請求
    }
   }catch (Exception e)
   {
    e.printStackTrace();
   }
   }
  }
  
  這個類的使用方法和第一種情況的那個類是一樣的,只需要在原有的代碼上加入兩行代碼即可:
  
  InstanceControl2 ic = new InstanceControl();
  ic.start();
  
  擴展
  上面的程序也許有一個小bug,就是假如程序在開始運行時ServerSocket監聽的端口已經被其它程序占用,那么程序的運行就會受到影響。所以程序的端口應該盡量取得大一些,在這種情況下其它程序占用這個程序使用的端口的概率是可以忽略不計的。同時,還可以做兩種擴展,第一種是把端口寫在配置文件中,可通過讀配置文件得到端口,這樣就能夠在其它程序占用目前端口的情況下改變這個程序使用的端口。還有一種是在運行的時候用兩個InstanceControl類分別在兩個端口監聽,只要有一個InstanceControl類得到連接就做出響應,這樣兩個端口都被其它程序占用的概率就更加的微乎其微了

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线播放91| 久久欧美在线电影| 午夜精品久久17c| 亚洲欧美中文字幕在线一区| 日本欧美一级片| 精品无人区太爽高潮在线播放| 国产女精品视频网站免费| 日韩hd视频在线观看| 亚洲视屏在线播放| 久久av红桃一区二区小说| 亚洲第一页在线| 国产精品久久久久久久久久久久久久| 亚洲欧美中文在线视频| 高清一区二区三区日本久| 欧美日韩精品在线播放| 一本大道久久加勒比香蕉| 九九热精品视频| 欧美夜福利tv在线| 国产成+人+综合+亚洲欧美丁香花| 亚洲石原莉奈一区二区在线观看| 欧美成人手机在线| 在线视频日本亚洲性| 欧美日韩免费区域视频在线观看| 中文字幕综合在线| 国产精品久久久久av| 日韩精品黄色网| 萌白酱国产一区二区| 欧美巨大黑人极品精男| 亚洲美女在线视频| 久久综合网hezyo| 久久久久久久国产精品视频| 欧美日韩亚洲视频| 国产免费一区二区三区在线观看| 亚洲va男人天堂| 国产欧美精品日韩| 欧美性高潮床叫视频| 日韩欧美大尺度| 成人福利网站在线观看| 久久久久久高潮国产精品视| 日韩中文在线视频| 精品免费在线视频| 亚洲欧美在线免费观看| 日本午夜人人精品| 久久久久免费视频| 91免费福利视频| 亚洲午夜色婷婷在线| 国产精品久久久久久久电影| 97精品国产97久久久久久免费| 亚洲成年人在线播放| 日韩精品一区二区视频| 国产精品成av人在线视午夜片| 色诱女教师一区二区三区| 欧美性猛交xxxx乱大交| 久久久精品亚洲| 91视频国产精品| 国产精品视频一区国模私拍| 国产精品福利网| 国产精品免费福利| 欧美精品18videosex性欧美| 亚洲欧美在线磁力| www.国产一区| 国产精品观看在线亚洲人成网| 欧美夜福利tv在线| 日韩成人xxxx| 亚洲天堂精品在线| 91国内揄拍国内精品对白| 国产偷国产偷亚洲清高网站| 久久精品一偷一偷国产| 亚洲高清色综合| 亚洲激情成人网| 欧美中文在线免费| 日韩在线欧美在线国产在线| 国产91精品青草社区| 国产精品美女主播| 日本高清视频一区| 欧美激情视频在线免费观看 欧美视频免费一| 欧美视频13p| 国产精品久久久久国产a级| 国产成+人+综合+亚洲欧洲| 日本免费一区二区三区视频观看| 91精品国产综合久久香蕉| 成人在线免费观看视视频| 欧美精品aaa| 久久亚洲影音av资源网| 国产第一区电影| 国产成人精品免费久久久久| 久久久久久综合网天天| 98视频在线噜噜噜国产| 国产精品久久久久久久一区探花| 久久精品电影网站| 日本在线观看天堂男亚洲| 亚洲欧洲一区二区三区久久| 国产a∨精品一区二区三区不卡| 日韩成人激情在线| 777午夜精品福利在线观看| 日本高清视频精品| 浅井舞香一区二区| 中文字幕亚洲综合久久筱田步美| 一区二区三区在线播放欧美| 亚洲一区二区精品| 欧美性猛交xxxx免费看漫画| 久久久久久亚洲精品中文字幕| 国产a∨精品一区二区三区不卡| …久久精品99久久香蕉国产| 日韩av在线网页| 欧美电影电视剧在线观看| 亚洲一区二区在线播放| 91人成网站www| 欧美夫妻性生活视频| 欧美猛少妇色xxxxx| 国产免费一区二区三区香蕉精| 国产伦精品一区二区三区精品视频| 亚洲视频免费一区| 久久99国产精品久久久久久久久| 一区二区三区国产视频| 97在线看免费观看视频在线观看| 国产成人综合精品在线| 欧美激情亚洲另类| 久久久精品免费视频| 色视频www在线播放国产成人| 国产精品久久久久av免费| 亚洲精品一区av在线播放| 97免费视频在线播放| 国产精品久久久| 国产亚洲欧美日韩精品| 亚洲va男人天堂| 国产成人精品午夜| 狠狠爱在线视频一区| 久久99国产综合精品女同| 亚洲аv电影天堂网| 欧美成人精品影院| 欧美日韩午夜激情| 欧美性猛交xxxx乱大交3| 欧美视频在线观看免费网址| 91国内免费在线视频| 成人黄色午夜影院| 97精品国产97久久久久久免费| 尤物九九久久国产精品的特点| 欧美大胆在线视频| 亚洲第一页中文字幕| 97在线精品国自产拍中文| 亚洲精品自拍视频| 97热在线精品视频在线观看| 中文字幕日韩av电影| 日韩大胆人体377p| 97**国产露脸精品国产| 亚洲国产精久久久久久久| 国产精品igao视频| 日韩免费在线电影| 国产精品在线看| 136fldh精品导航福利| 欧美性极品少妇精品网站| 欧美黑人又粗大| 欧美肥臀大乳一区二区免费视频| 国产一区二区三区高清在线观看| 欧洲成人免费视频| 亚洲一级一级97网| 欧美一级黑人aaaaaaa做受| 亚洲美女av在线播放| 欧美大片免费观看在线观看网站推荐| 国产成人在线播放| 日韩在线视频国产| 热re99久久精品国产66热| 成人av资源在线播放|