1. 程式人生 > >多執行緒練習

多執行緒練習

package practice;
/*請按要求編寫多執行緒應用程式,模擬多個人通過一個山洞:
		1.這個山洞每次只能通過一個人,每個人通過山洞的時間為5秒;
2.隨機生成10個人,同時準備過此山洞,並且定義一個變數用於記錄通過隧道的人數。顯示每次通過山洞人的姓名,和通過順序;*/

//定義實現類
import java.util.Random;

public class Runnable01 implements Runnable {
    int num = 0;
    //Object obj = new Object();

    @Override
    public void run() {
        synchronized ( this/*obj*/) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            num++;
            System.out.println(Thread.currentThread().getName()+"順序為:"+num);
        }

    }
}
 //定義測試類
package practice;

public class Runnable01Test {
    public static void main(String[] args) {
        Runnable01 run = new Runnable01();
       new Thread(run,"張三1").start();
       new Thread(run,"張三2").start();
       new Thread(run,"張三3").start();
       new Thread(run,"張三4").start();
       new Thread(run,"張三5").start();
       new Thread(run,"張三6").start();
       new Thread(run,"張三7").start();
       new Thread(run,"張三8").start();
       new Thread(run,"張三9").start();
       new Thread(run,"張三10").start();
    }
}
結果為: 張三1順序為:1
        張三10順序為:2
        張三9順序為:3
        張三8順序為:4
        張三7順序為:5
        張三6順序為:6
        張三5順序為:7
        張三4順序為:8
        張三3順序為:9
        張三2順序為:10
package homework;
/*有一個包包的數量為100個。分別從實體店和官網進行售賣!
	要求使用多執行緒的方式,分別列印實體店和官網賣出包包的資訊!
	分別統計官網和實體店各賣出了多少個包包,例如:
	官網共賣出了45個
	實體店共賣出了55個*/
public class RunnableImpl02 implements Runnable {
    private int bags = 100;
    int num1 = 0;
    int num2 = 0;
    @Override
    public void run() {
        while (true) {
            payTicket();
        }
    }
    public synchronized void payTicket() {
        //synchronized (obj){
        if (bags > 0) {
            try {
                Thread.sleep(10);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (Thread.currentThread().getName().equals("官網")) {
                num1++;
            } else {
                num2++;
            }
            System.out.println(Thread.currentThread().getName() + "正在賣第" + bags + "個包");
            bags--;
            if (bags == 0) {
                System.out.println("官網:" + num1);
                System.out.println("實體店:" + num2);
            }
        }
    }
}

//定義測試類
package homework;

public class RunnableImpl02Test {
    public static void main(String[] args) {
        RunnableImpl02 run = new RunnableImpl02();
        Thread t1 = new Thread(run);
        Thread t2 = new Thread(run);
        t1.setName("官網") ;
        t2.setName("實體店") ;
        t1.start();
        t2.start();

    }
}