深入淺出Java多線程(2):Swing中的EDT(事件分發(fā)線程)

字號(hào):

本文主要解決的問題是:如何使其Swing程序只能運(yùn)行一個(gè)實(shí)例?
    拋開Swing, 我們的程序是通過java 命令行啟動(dòng)一個(gè)進(jìn)程來(lái)執(zhí)行的,該問題也就是說(shuō)要保證這個(gè)進(jìn)程的性,當(dāng)然如果能夠訪問系統(tǒng)的接口,得到進(jìn)程的信息來(lái)判斷是否已有進(jìn)程正在運(yùn)行,不就解決了嗎?但是如何訪問系統(tǒng)的接口呢?如何要保證在不同的平臺(tái)上都是OK的呢?我的思路是用文件鎖,當(dāng)然我相信肯定有更好的方法,呵呵,希望讀者能夠指出。
    文件鎖是JDK1.4 NIO提出的,可以在讀取一個(gè)文件時(shí),獲得文件鎖,這個(gè)鎖應(yīng)該是系統(tǒng)維護(hù)的,JVM應(yīng)該是調(diào)用的系統(tǒng)文件鎖機(jī)制,例子如下:
    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/
    -->import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileLock;
    /**
    *
    * @author vma
    */
    public class temp1 {
    public static void main(String args[]) throws FileNotFoundException, InterruptedException, IOException{
    RandomAccessFile r = new RandomAccessFile("d://testData.java","rw");
    FileChannel temp = r.getChannel();
    FileLock fl = temp.lock();
    System.out.println(fl.isValid());
    Thread.sleep(100000);
    temp.close();
    }