Java—多線程

多線程的實現方式 一

package Test_12;
/*
 * 進程:當前正在運行的程序,一個應用程序在內存中的執行區域
 * 線程:進程中的一個執行控制單元
 * 
 * 一個進程可以有一個線程(單線程),也可以有多個線程(多線程)
 * 
 * 單線程:安全性高,效率低
 * 多線程:效率高,安全性低
 * 
 * 多線程的實現:
 *      1.一種方法是將類聲明爲 Thread 的子類。該子類應重寫 Thread 類的 run 方法。
 *      2.另一種方法是聲明實現 Runnable 接口的類。該類然後實現 run 方法。
 *           然後可以分配該類的實例,在創建 Thread 時作爲一個參數來傳遞並啓動。
 * 
 * Thread類的方法:
 *      1. String getName()   返回該線程的名稱。 
 *      2. void setName(String name)   改變線程名稱,使之與參數 name 相同。 
 *      3. void start() 使該線程開始執行;Java 虛擬機調用該線程的 run 方法。 
 * 
 */
public class ThreadDemo {
    public static void main(String[] args) {
        //創建線程對象
        MyThread mt = new MyThread();
        //修改線程名
        mt.setName("線程一");
        //啓動線程
        mt.start();

        //創建線程對象
        MyThread mt2 = new MyThread();
        //修改線程名
        mt2.setName("線程二");
        //啓動線程
        mt2.start();
    }
}


----------

package Test_12;

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

多線程的實現方式二

package Test_12;
/*
 * 多線程的實現方式二:
 *      聲明實現 Runnable 接口的類。該類然後實現 run 方法。
 *      然後可以分配該類的實例,在創建 Thread 時作爲一個參數來傳遞並啓動。
 * 
 * Thread(Runnable target) 分配新的 Thread 對象。
 * 
 * static Thread currentThread() 返回對當前正在執行的線程對象的引用。 
 * 
 * 
 * 
 */
public class ThreadDemo2 {
    public static void main(String[] args) {
        //創建線程對象
        MyThread mt = new MyThread();
        //修改線程名
        mt.setName("線程一");
        //啓動線程
        mt.start();

        //創建線程對象
        MyThread mt2 = new MyThread();
        //修改線程名
        mt2.setName("線程二");
        //啓動線程
        mt2.start();
    }
}


----------

package Test_12;

public class MyThread2 implements Runnable {

    @Override
    public void run() {
        Thread tr = Thread.currentThread();
        for (int i = 0; i < 100; i++) {
            System.out.println(tr.getName()+":"+i);
        }
    }

  /*@Override
    public void run() {
        // Thread tr = Thread.currentThread();
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }*/

  /*@Override
    public void run() {
        // Thread tr = new Thread();
        for (int i = 0; i < 100; i++) {
            System.out.println(new Thread().getName()+":"+i);
        }
    }*/

}

多線程模擬火車站售票

package Test_12;
/*
 * 多線程模擬火車站售票
 *      分析:
 *          1.定義火車票總量,每出售一張則總票數減一
 *          2.當總票數等於零時則停止售票
 *          3.使用多線程模擬多個售票窗口售票
 *      
 * static void sleep(long millis) 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。  
 * 
 * synchronized:同步(鎖),可以修飾代碼塊和方法,被修飾的代碼塊和方法一旦被某個線程訪問,則直接被鎖住,其他的線程無法訪問
 * 
 * 同步代碼塊:
 *          synchronized(鎖對象){
 * 
 *          }
 * 注意:鎖對象需要被所有的線程所共享
 * 
 * 同步方法:使用關鍵字synchronized修飾的方法,一旦被一個線程訪問,則整個方法全部被鎖住,其他線程無法訪問
 * 
 * 注意:
 *      1.非靜態同步方法的鎖對象是this
 *      2.靜態同步方法的鎖對象是當前類的字節碼對象
 * 
 */
public class TicketTest {
    public static void main(String[] args) {
        //創建線程對象
        TicketThread tt = new TicketThread();

        Thread tr = new Thread(tt);
        //修改線程名
        tr.setName("窗口1");
        //啓動線程
        tr.start();

        Thread tr2 = new Thread(tt);
        //修改線程名
        tr2.setName("窗口2");
        //啓動線程
        tr2.start();

        Thread tr3 = new Thread(tt);
        //修改線程名
        tr3.setName("窗口3");
        //啓動線程
        tr3.start();
    }
}


----------

package Test_12;

public class TicketThread implements Runnable {
    int tickets = 100; //火車票總量
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true){
            method();
        }
    }
    private synchronized void method() {
        if(tickets>0){
            try {
                Thread.sleep(100);//線程休眠100ms
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            System.out.println(Thread.currentThread().getName()+":"+tickets--);
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章