1. 多任務、進程、線程是什麼?多線程
2. 單線程程序與多線程程序app
3.建立線程jvm
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()