java多線程簡單用法
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{
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進程。而主方法知識這個進程上的一個線程而已。
線程休眠
主方法只是一個中等優先級
線程死鎖:
死鎖一旦出現之後實際整個程序就將暫時性中斷執行了,所以死鎖屬於一個嚴重性的問題,而這個出現的概率不高。
那麽在整體的感念理念:數據若果要想完整操作必須使用同步,但是過多的同步會造成死鎖,沒事幹考慮好了再加同步。
請解釋sleep和wait的區別?
1、sleep是Tread類中定義的方法,到了一定時間後休眠的線程可以自動喚醒
2、wait()是Object類中定義的方法,如果想要喚醒,必須使用notify()、notifyAll()方法才可以喚醒。
notify() 喚醒第一個等待線程
notifyAll() 喚醒所有等待的線程,哪個優先級高,他就有可能先執行。
java多線程簡單用法