Java多線程編程

1.線程和進程

線程:程序中單獨順序的控制流

           線程本身依靠程序進行運行

           線程是程序中的順序控制流,只能使用分配給程序的資源和環境

進程:執行中程序

           一個進程可以包含一個和多個線程

           一個線程至少包含一個線程

2.線程的實現

   在java中,線程實現的方法有2種

   1)繼承Thread類

public class ThreadDemo1 extends Thread{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
    }

    
}
2)實現Runnale方法


public class ThreadDemo1 implements Runnable {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
    } 
}


3.線程的狀態

  1)創建狀態:準備好了一個多線程的對象

  2)就緒狀態:調用了start()方法,等待CPU進行調度

  3)運行狀態:執行了run()方法

  4)暫時停止運行,可能將資源交給其他線程運行

  5)死亡狀態:線程銷燬


4.線程的常用方法

  1)獲取當前線程的名稱

       getName()

  2)獲得當前線程的對象

     currentThread();

 3)判斷線程是否啓動

      isAlive()

 4)線程的強行運行

     join()

 5)線程的休眠

     sleep()

5. 線程的優先級

常見的線程優先級有 

Thread.MAX_PRIORITY
<pre name="code" class="html">Thread.MIN_PRIORITY
Thread.NORM_PRIORITY

class ThreadDemo1 implements Runnable {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < 10; i++)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("ffffffffffff");
        }
    } 
}


class Test{
    
    public static void main(String[] args) {
        
        Thread t1 = new Thread(new ThreadDemo1());
        t1.setPriority(Thread.MAX_PRIORITY);
        
        Thread t2 = new Thread(new ThreadDemo1());
        t2.setPriority(Thread.MIN_PRIORITY);
        
        Thread t3 = new Thread(new ThreadDemo1());
        t3.setPriority(Thread.NORM_PRIORITY);
    }
    
}

6.線程的同步

  

class ThreadTest implements Runnable {
    private int ticket = 5;
    @Override
    public void run() {
        
        // TODO Auto-generated method stub
        for(int i = 0; i < 10; i++)
        {
            ticket(i);
        }
    }

    private synchronized void ticket(int i) {
        if(ticket > 0)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("車票 == "+ ticket--);
        }
    } 
}


class ThreadDemo1{
    
    public static void main(String[] args) {
        ThreadTest testthread = new ThreadTest();
        Thread t1 = new Thread(testthread);
        Thread t2 = new Thread(testthread);
        Thread t3 = new Thread(testthread);
        
        t1.start();
        t2.start();
        t3.start();
    }
    
}



發佈了27 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章