JAVAマルチスレッド-スレッド

3033 ワード

スレッドを作成するには、マルチスレッドを理解するには、まずスレッドを作成する方法を知っておく必要があります。Threadクラスを継承し、Runnableインターフェースを実現し、Callableインターフェースを実現します。
//作成スレッド方式一:Thread類を引き継ぎ、run()方法を書き換え、startオープンスレッドpublic class TestThread 1 extends Thread{@Override public void run(){/runメソッドスレッド体for(int i=0;)を呼び出します。i<20;i+){System.out.println(「勉強しています」+i)}
public static void main(String[] args) {
    //main  ,   

    //        
    TestThread1 testThread1 = new TestThread1();
    //  start()      
    testThread1.start();

    for (int i = 0; i < 20; i++) {
        System.out.println("        "+i);
    }
}
}/作成スレッド方式2:runnableインターフェースを実現し、run方法を書き換え、実行スレッドはrunnableインターフェースの実現類に入れなくてはならず、start方法public class TestThread 3 implemens Runnable{public void run(){for(int i=0;i<20;i+){System.out.println("コードを見ています")}
public static void main(String[] args) {

    //  runnable        
    TestThread3 testThread3 = new TestThread3();
    //      ,              ,  
    Thread thread = new Thread(testThread3);

    thread.start();

    for (int i = 0; i < 20; i++) {
        System.out.println("       ");
    }
}
}3つ目はダウンロードしたjarパッケージを通してデモを行い、まずcommons-i 2 o 2.7/スレッド作成方式3を導入する。Callableインターフェースを実現する/先に依存/callableを導入する利点は、戻り値を定義することができます。例外*/public class TestCallable implements Callable{
private String url;
private String name;

public TestCallable(String url, String name) {
    this.url = url;
    this.name = name;
}

public Boolean call() throws Exception {
    webDownloader webDownloader = new webDownloader();
    webDownloader.downloader(url,name);
    System.out.println("      "+name);
    return true;
}

public static void main(String[] args) throws ExecutionException, InterruptedException {
    TestCallable t1 = new TestCallable("    ", "1.jpg");
    TestCallable t2 = new TestCallable("    ", "2.jpg");
    TestCallable t3 = new TestCallable("    ", "3.jpg");

    //      :
    ExecutorService ser = Executors.newFixedThreadPool(3);
    //      
    Future r1 = ser.submit(t1);
    Future r2 = ser.submit(t2);
    Future r3 = ser.submit(t3);

    //    
    Boolean rs1 = r1.get();
    Boolean rs2 = r2.get();
    Boolean rs3 = r3.get();

    //    
    ser.shutdownNow();
}
)
//ダウンロード器class webDownloader{
public void downloader(String url,String name) {
    try {
        FileUtils.copyURLToFile(new URL(url),new File(name));
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("I0  , downloader      ");
    }
}
}Copyスレッドの不安全ロック条件
相互反発条件:リソースは毎回一つのプロセスでしか使用できません。要求と保持条件:1つのプロセスは、リソースを要求することによってブロックされたとき、獲得されたリソースを保持します。条件を奪わない:プロセスが獲得した資源は、最終的に使用される前に、強制的に奪うことはできません。循環待ち条件:いくつかのプロセスの間に、一連の資源待ち関係が形成されます。
————————————————原文の作者:HuDuはリンクから回転します。https://learnku.com/articles/46533 著作権声明:著作権は著者の所有になります。商業転載は作者に連絡して授権を得てください。商業転載ではなく、以上の作者の情報と原文のリンクを保留してください。