1. 程式人生 > >java多線程簡單用法

java多線程簡單用法

什麽 操作 內部類 bject .get exce for 簡單用法 什麽是

1、實現多線程-匿名內部類
public class Test{
public static void main(String[] args){
    new Thred(new Runnable(){
      @Override
      public void run(){
        System.out.println("hello word");
      }
    }).start();
  }
}
2、實現多線程-使用lamda
public class Test{
public static void main(String[] args){
new Thred(()->System.out.println("Hello Word!")).start();

}
}
在實際開發過程中,Runnable接口的子類的實現形式可能很少見,以上兩種是最為常見的做法。

Runnable中的run方法雖然也是線程的主方法,但是其沒有返回值,因為它的設計遵循了主方法的設計原則:線程開始了就別回頭。

但是很多時候需要一些返回值,例如:當某些線程執行完成後有可能帶來一些結果,這種情況下我們只能利用Callable來拿到返回值。


不管何種情況,要想啟動多線程只有Thread類的start()方法
public class Test implements Callable<String>{

@Override
public String call() throws exception{

for(int i=0;i<20;i++){
System.out.println(i);
}
return "票賣完了,下次吧。。。";
}

publlic static void main(String[] args){
FutureTask<String> task = new FutureTask<String>();
new Thred(task).start();
System.out.println(task.get());
}
}

什麽是進程?
實際上每當使用了java命令去解釋程序的時候,都表示啟動了一個新的JVM進程。而主方法知識這個進程上的一個線程而已。

JVM是一個進程,所有的主方法都是一個線程,由主線程創建所有的子線程


線程休眠

主方法只是一個中等優先級


線程死鎖:
死鎖一旦出現之後實際整個程序就將暫時性中斷執行了,所以死鎖屬於一個嚴重性的問題,而這個出現的概率不高。
那麽在整體的感念理念:數據若果要想完整操作必須使用同步,但是過多的同步會造成死鎖,沒事幹考慮好了再加同步。


請解釋sleep和wait的區別?
1、sleep是Tread類中定義的方法,到了一定時間後休眠的線程可以自動喚醒
2、wait()是Object類中定義的方法,如果想要喚醒,必須使用notify()、notifyAll()方法才可以喚醒。
notify() 喚醒第一個等待線程
notifyAll() 喚醒所有等待的線程,哪個優先級高,他就有可能先執行。

java多線程簡單用法