日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java笔记-多线程相关

發布時間:2025/3/15 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java笔记-多线程相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

ava多線程和C++里面的多線程有些地方不一樣。

畢竟套了一個java虛擬機。對此記錄下。

?

?

?

Java語言內置多線程支持:

一個java程序實際上是一個JVM進程。

JVM用一個主線程來執行main()方法。

在main()方法中又可以啟動多個進程。

?

?

Java多線程創建MyThread類邏輯:

1.?從Thread派生;

2.?覆寫run()方法;

3.?創建MyThread實例;

4.?調用start()啟動線程。

創建一個線程對象,并啟動一個線程。

Thread t = new Thread(); t.start();

如果一個類已經從某個類派生,無法從Thread繼承,那么需要的邏輯:

1.?實現Runable接口;

2.?覆寫run()方法;

3.?在main()方法中創建Runnable實例;

4.?創建Thread實例并傳入Runnable;

5.?調用start()啟動線程。

?

?

如下代碼:

class Thread1 extends Thread{String name;public Thread1(String name){this.name = name;}@Overridepublic void run() {for(int i = 0; i < 5; i++){System.out.println("[" + Thread.currentThread().getId() + "]" + " " + name);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}} }public class Main1 {public static void main(String[] args){Thread1 t1 = new Thread1("線程1");t1.start();Thread1 t2 = new Thread1("線程2");t2.start();System.out.println("Over!");} }

程序運行截圖如下:

這里要注意:為什么主線程已經結束了,子線程還在跑。

Java沒有嚴格的主線程和子線程的概念。除非主線程終止了子線程,否則子線程會一直執行。

?

下面是線程的優先級:

可以對線程設置優先級Thread.setPriority(int?n)//?1~10,默認為5

優先級高的線程被操作系統調度優先級高

不能通過設置優先級來確保先后順序。

?

?

Java多線程的狀態:

New(新創建)、Runnable(運行中)、Blocked(被阻塞)、Waiting(等待)、Timed?Waiting(計時等待)、Terminated(已種子)

?

線程終止的原因:

run()方法執行到return語句返回(線程正常結束)

因為未捕獲的移除導致線程終止(線程意外終止)

對某個線程的Thread實例調用stop()方法強制終止(不推薦)

?

如下代碼:

class MyThread extends Thread{String name;public MyThread(String name){this.name = name;}@Overridepublic void run() {for(int i = 0; i < 5; i++){System.out.println("[" + Thread.currentThread().getId() + "]" + " " + name);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}} }public class Main2 {public static void main(String[] args) throws InterruptedException {MyThread myThread = new MyThread("線程");System.out.println("線程");myThread.start();myThread.join(); //等待myThread執行結束System.out.println("END");} }

程序運行截圖如下:

如果線程需要執行一個長時間任務,就可能需要能中斷線程。

中斷線程就是其他線程給該線程發一個信號,該線程收到信號后結束執行run()方法。

中斷線程需要通過檢測inlnterrupted()標志。

其他線程通過調用interrupt()方法中斷該線程。

代碼如下:

class MyThread2 extends Thread{@Overridepublic void run() {while(!isInterrupted()){System.out.println("[" + Thread.currentThread().getId() + "]" + " " + "Hello");}} }public class Main3 {public static void main(String[] args) throws InterruptedException {MyThread2 myThread = new MyThread2();myThread.start();Thread.sleep(1000);myThread.interrupt();} }

程序運行截圖如下:

如果線程處于等待狀態,該線程會捕獲InterruptedException

捕獲到InterruptedException說明有其他線程對其調用了interrupt()方法。通常情況下該線程會立刻結束運行

代碼如下:

class MyThread3 extends Thread{@Overridepublic void run() {while(!isInterrupted()){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}} }public class Main4 {public static void main(String[] args){} }

還可以設置running標志位,這個就和C++里面常用的方法一樣。外部通過修改一個成員的狀態來讓其退出。

但是不同的是,java有個java虛擬機。這個和C++里面的不一樣。

要用volatile關鍵字,如下:public?volatile?boolean?running?=?false;

?

?

Java虛擬機里面,有給主內存的概念,其實任意變量都是在主內存中,當創建了線程后,會在線程中有給變量,這個變量同時也會在主內存中,有一個變量與之對于。

如下:

?

這樣在跟新的時候,就會存中誤差。所以就需要volatile關鍵字:

volatile關鍵字的目的是告訴虛擬機:

每次訪問變量時,總是獲取主內存的最新值。

每次修改變量后,立刻回寫到主內存。

?

Volatile關鍵字解決的是可見性問題:

當一個線程修改了某個共享變量的值,其他線程能夠立刻看到修改后的值。

代碼如下:

class MyThread5 extends Thread{public volatile boolean running = true;@Overridepublic void run() {while(running){System.out.println("Hello");try {Thread.sleep(100);}catch (InterruptedException e) {e.printStackTrace();System.out.println("InterruptedException");break;}}} }public class Main5 {public static void main(String[] args) throws InterruptedException {MyThread5 myThread5 = new MyThread5();myThread5.start();Thread.sleep(1000);myThread5.running = false;System.out.println("end");} }

程序運行截圖如下:

源碼打包下載地址:https://github.com/fengfanchen/Java/tree/master/MultiThreadInJav

總結

以上是生活随笔為你收集整理的Java笔记-多线程相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。