瞭解線程

1. 多任務、進程、線程是什麼?多線程

  • 當你再pc上邊聽歌邊寫博客,還掛着qq,你已經在使用多任務了。cpu會分配給不一樣每一個應用不一樣的時間片,它們實際上是在後臺輪流執行,時間短,看着就像在同時運行同樣。
  • 進程就是ctrl+alt+. 打開任務管理器以後就能看到了,一個進程由不少個線程組成;
  • 線程就是組成程序執行的最小單位了。

2. 單線程程序與多線程程序app

  • 單線程程序:你必須在聽歌的時候關閉qq,不能寫博客。
  • 多線程程序:同時執行多個程序

3.建立線程jvm

  • 繼承Thread類<也實現了Runnable接口>
  • 實現Runnable接口(較多使用)

4.建立第一個線程ide

class MyThread extends Thread{
    public MyThread(String name){
        super(name);
    }
    @Override
    public void run() {
        for(int i=0;i<10;i++){
            System.out.println(getName()+"啓動了!"); //run()裏放的就是該線程要作的事情,能夠被多個線程共享,就是說線程1能夠去執行run
        }
    }
}
public class ThreadDemo  {

    public static void main(String[] args) {
        MyThread myThread=new MyThread("線程1");
        MyThread myThread1=new MyThread("線程2");
        myThread.start();//jVM會去調用run方法
        myThread1.start();
    }
}

經過多執行幾回代碼發現,線程的執行順序是隨機的,結果並不惟一。this

5.使用Runnable接口建立線程spa

class MyThread1 implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"運行了");
    }
}
public class RunnableTest {
    public static void main(String[] args) {
        MyThread1 myThread1=new MyThread1();
        Thread thread=new Thread(myThread1,"線程run");
        thread.start();        //仍是經過構造Thread對象來調用start()
    }
}
//對start()的解釋
   Causes this thread to begin execution; the Java Virtual Machine * calls the
<code>run</code> method of this thread. * <p> * The result is that two threads are running concurrently: the * current thread (which returns from the call to the * <code>start</code> method) and the other thread (which executes its * <code>run</code> method). * <p> * It is never legal to start a thread more than once. * In particular, a thread may not be restarted once it has completed execution.
線程開始執行,jvm會調用線程中的run()。
結果是兩個線程同時執行:當前的線程(調用start()返回的線程)和其餘線程(執行run())
一個線程屢次start是不合法的。一般狀況下一個線程完整執行完後不會再次start

 6.線程狀態及生命週期線程

7. sleep()  和  join()3d

        sleep():app的按期刷新,定時執行。俗稱:休眠rest

  join():要等調用該方法的線程執行完成後,才能執行。俗稱:插隊code

8. 線程的優先級  

Note:線程何時運行是不肯定的,即便設置了優先級,影響線程啓動的因素不少,致使線程仍是隨機啓動的

//兩種設置優先級的方式
thread.setPriority(10);thread.setPriority(Thread.MAX_PRIORITY);
//獲取優先級
thread.getPriority(

9.線程同步

 問題:在前面咱們知道,線程的啓動和中止老是隨機的,不可預測。

 模擬銀行取款爲例,存款爲一個線程,取款爲一個線程。好比帳戶有100元,現存進去100,有200了,再取50,剩150。

可能出現的問題是在你執行存款方法的時候,還沒執行到保存的方法,線程就被取款線程取代,結果就是,帳戶就剩50元。

關鍵字

  見另外一篇博客:

10 線程間的通訊

wait()、死鎖,notify():喚醒等待的線程,notifyAll()

相關文章
相關標籤/搜索