多線程

public class Main {
    static int i = 0;
    public static void main(String[] args) {
        //啟動(dòng)線程
        new mThread().start();
        new mThread().start();
        //主線程中循環(huán)
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
    }
}
class mThread extends Thread {
    int i = 0;
    @Override
    public void run() {
        super.run();
        for (; i < 100; i++) {
            System.out.println(getName() + "->" + i);
        }
    }
}

public class Main {
    static int i = 0;
    public static void main(String[] args) {
        //啟動(dòng)線程
        mThread mThread = new mThread();
        new Thread(mThread).start();
        new Thread(mThread).start();        
        //主線程中循環(huán)
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
    }
}
class mThread implements Runnable {
    int i = 0;
    @Override
    public void run() {
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
    }
}

注意: 上面代碼中的Thread 公用的一個(gè)Runnable Target 所以變量i只有一份 打印的時(shí)候 兩個(gè)線程公用的是一個(gè)變量i,兩個(gè)線程 不共用一個(gè)線程方法就是 創(chuàng)建兩個(gè)Runnable Target 這樣就會(huì)創(chuàng)建兩個(gè)變量i線程和線程之間就沒(méi)有聯(lián)系了

public class Main {
    static int i = 0;
    public static void main(String[] args) {
        //啟動(dòng)線程
        new Thread(new mThread()).start();
        new Thread(new mThread()).start();      
        //主線程中循環(huán)
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
    }
}
class mThread implements Runnable {
    int i = 0;
    @Override
    public void run() {
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
    }
}
public class Main {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Main main = new Main();
        // 創(chuàng)建線程,創(chuàng)建帶返回值的Callable線程
        FutureTask<Integer> task = new FutureTask<>((Callable<Integer>) () -> {
            int i = 0;
            for (; i < 100; i++) {
                System.out.println(Thread.currentThread().getName() + "->" + i);
            }
            return i;
        });
        // 啟動(dòng)線程
        new Thread(task).start();
        // 主線程
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
        }
        System.out.println("子線程的返回值為:"+task.get());
    }
}
線程狀態(tài)圖
public class Main {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        // 創(chuàng)建線程,創(chuàng)建帶返回值的Callable線程
        FutureTask<Integer> task = new FutureTask<>((Callable<Integer>) () -> {
            int i = 0;
            for (; i < 100; i++) {
                System.out.println(Thread.currentThread().getName() + "->" + i);
            }
            return i;
        });
        // 創(chuàng)建線程空間
        Thread thread = new Thread(task);
        // 主線程
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
            if(i == 20){
                //啟動(dòng)線程
                thread.start();
                //讓當(dāng)前線程等待
                thread.join();
            }
        }
        System.out.println("子線程的返回值為:"+task.get());
    }
}
public class Main {
    public static void main(String[] args) throws InterruptedException {
        for(int i = 0;i <=100;i++){
            System.out.println(Thread.currentThread().getName() + "->" + i);
            if(i==20){
                mThread thread = new mThread();
                mThread thread1 = new mThread();
                thread.start();
                thread1.start();
                thread.join();
            }
        }
    }
}

class mThread extends Thread {
    int i = 0;
    @Override
    public void run() {
        super.run();
        for (; i < 100; i++) {
            System.out.println(getName() + "->" + i);
        }
    }
}

小結(jié):如果在主線程中創(chuàng)建兩個(gè)線程(thread ,thread 1)然后在主線程執(zhí)行thread的join方法,會(huì)讓主線程等待thread執(zhí)行完成后才會(huì)獲得調(diào)度。期間 thread和thread1會(huì)共同執(zhí)行。

public class Main {
    public static void main(String[] args) throws InterruptedException {
        for(int i = 0;i <=100;i++){
            System.out.println(Thread.currentThread().getName() + "->" + i);
            if(i == 20){
                mThread thread = new mThread();
                //設(shè)置為守護(hù)線程,主線程執(zhí)行完成后 不需要等待子線程執(zhí)行完就可以退出虛擬機(jī)
                thread.setDaemon(true);
                thread.start();}}}}
class mThread extends Thread {
    int i = 0;
    @Override
    public void run() {
        super.run();
        for (; i < 800; i++) {
            System.out.println(getName() + "->" + i);}}}
public class Main {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + "->" + i);
            if (i == 20) {
                mThread thread = new mThread();
                thread.start();
            }
            if(i == 50){
                Thread.sleep(5000);
            }
        }
    }
}
class mThread extends Thread {
    int i = 0;
    @Override
    public void run() {
        super.run();
        for (; i < 1000; i++) {
            try {sleep(1);} catch (InterruptedException e) {}
            System.out.println(getName() + "->" + i);}}}
public class Main {
    public static void main(String[] args) throws InterruptedException {
        mThread thread = new mThread();
        mThread thread1 = new mThread();
        thread.setPriority(Thread.MAX_PRIORITY);
        thread1.setPriority(Thread.MIN_PRIORITY);
        thread.start();
        thread1.start();
    }
}

class mThread extends Thread {
    int i = 0;
    @Override
    public void run() {
        super.run();
        for (; i < 100; i++) {
            try {
                sleep(1);
            } catch (InterruptedException e) {
            }
            System.out.println(getName() + "->" + i);
            // 線程讓步
            if (i == 20) {
                yield();
            }
        }
    }
}


先看代碼

public class Main {
    public static void main(String[] args) throws InterruptedException {
        mThread thread = new mThread();
        mThread thread1 = new mThread();
        mThread thread2 = new mThread();
        mThread thread3 = new mThread();
        thread.start();
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

class mThread extends Thread {
    static int i = 100;
    @Override
    public void run() {
        super.run();
        try {
            sleep(10);
        } catch (InterruptedException e) {
        }
        for (; i > 0;--i) {
            System.out.println(getName() + "->" + i);
        }
    }
}

上面代碼正常來(lái)說(shuō)只會(huì)出現(xiàn)一個(gè)100 可是大多數(shù)會(huì)出現(xiàn)多個(gè)100,這顯然是不是我們想要的。

public class Main {
    public static void main(String[] args) throws InterruptedException {
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
        new mThread().start();
    }
}

class mThread extends Thread {
    static Integer i = 1000;
    @Override
    public void run() {
        super.run();
        try {
            sleep(10);
        } catch (InterruptedException e) {
        }
        synchronized(java.util.Calendar.getInstance()){
            for (; i > 0;--i) {
                System.out.println(getName() + "->" + i);
            }
        }
    }
}

同步方法:

BlockingQuaue實(shí)現(xiàn)類和父類關(guān)系圖
線程池工具類類圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容