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

歡迎訪問 生活随笔!

生活随笔

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

java

java线程三种方法,Java基础_线程的使用及创建线程的三种方法

發布時間:2023/12/15 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程三种方法,Java基础_线程的使用及创建线程的三种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線程:線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。

進程:進程是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。

進程與線程的一個簡單解釋(阮一峰)  傳送門

Java中創建一個線程,方法一:繼承Thread類

繼承Thread

重寫run方法

創建對象,并調用start方法運行

(如果直接調用run方法,相當于調用普通方法,并不會啟動線程去調用run)

public class MyThread extendsThread{

@Overridepublic voidrun() {for(int i=0;i<1000;i++) {

System.out.println("MyThread "+i);

}

}

}

packagecom.Gary1;public class MyThread extendsThread{

@Overridepublic voidrun() {for(int i=0;i<1000;i++) {

System.out.println("MyThread "+i);

}

}

}

MyThread.java

主方法啟動這個線程,直接調用該線程的start()方法,而不是調用run()方法

調用線程的run()方法,發現線程并沒有并發執行,只是簡單的方法調用

packagecom.Gary1;public classCreateThread {public static voidmain(String[] args) {

MyThread thread= newMyThread();

thread.run();//錯誤的,thread.run()指直接調用thread線程里邊的run方法//thread.start();//啟動線程,run方法自動調用

for(int i=0;i<1000;i++) {

System.err.println("MainThread "+i);

}

}

}

CreateThread.java

調用線程的start()方法,啟動線程,可以看到程序中主線程和MyThread線程是并發執行的

packagecom.Gary1;public classCreateThread {public static voidmain(String[] args) {

MyThread thread= newMyThread();//thread.run();//錯誤的,thread.run()指直接調用thread線程里邊的run方法

thread.start(); //啟動線程,run方法自動調用

for(int i=0;i<1000;i++) {

System.err.println("MainThread "+i);

}

}

}

CreateThread.java

a)獲取(當前)線程名字,設置名字

Thread mainThread = Thread.currentThread();

//設置線程名字

mainThread.setName("Gary");//獲得線程名字

System.out.println(mainThread.getName());

b)線程調度規則(線程調度會整體上是遵守下面的規則,但是從單個上來看是隨機的)

分時調度(平均分配):10個線程執行100毫秒CPU,每個線程平均分配10毫秒的CPU

搶占式調度(按照優先級)(Java使用的調度規則):優先級高的,有更高的幾率被CPU所執行

獲得線程優先級:thread.getPriority()

MyThread thread = newMyThread();//獲得線程優先級

System.out.println(thread.getPriority());

c)設置優先級為1,mainThread.setPriority()

mainThread.setPriority(1);

d)線程休眠,讓當前線程休眠(單位毫秒)

Thread.sleep();

e)join 把某個線程加入到當前線程中(Main()方法中為主線程,)

t1.join();

f)設置守護線程setDaemon(true)

如果程序中只剩下守護線程在運行,那么程序會停止

t2.setDaemon(true);

g)線程中斷

stop()啟用(被棄用)

interrupt() 讓線程自己拋出異常,讓線程自己可以處理被終止的時候做一些事情

t1.stop();

t1.interrupt();

Java中創建一個線程,方法二:實現Runnable接口

a)實現Runnable接口

b)實現run方法

c)創建當前類的對象和Thread的對象,并使用thread對象啟動線程

a)獲取當前線程的名字

Thread.currentThread().getName()

設置名字通過Thread對象

b)構造方法

Thread t = new Thread(Runnable target);

Thread t = new Thread(Runnable target,String name);

packagecom.Gary1;public class MyThread2 implementsRunnable{

@Overridepublic voidrun() {for(int i=0;i<100;i++) {//獲得當前線程

Thread t =Thread.currentThread();

System.out.println(t.getName()+i);

}

}

}

MyThread2.java

packagecom.Gary1;public classCreateThread2 {public static voidmain(String[] args) {//創建當前類的對象和Thread的對象

MyThread2 t = newMyThread2();//并使用thread對象啟動線程

Thread t1 = newThread(t);

t1.start();

Thread t2= new Thread(t,"線程2");

t2.start();//調用了同一個Thread2的run()方法

}

}

CreateThread2.java

方式二的好處:

可以避免單繼承帶來的局限性(實現了接口后,可以繼承一個別的類)

可以很好的處理兩個線程共享一個資源的情況

Java中創建一個線程,方法三:使用匿名內部類

a)new Runnable(){}

b)new Thread(){}

packagecom.Gary1;public classCreateThread3 {public static voidmain(String[] args) {//匿名內部類//適用于線程只在這里實現以此

Runnable r = newRunnable() {

@Overridepublic voidrun() {for(int i=0;i<100;i++) {

System.out.println(Thread.currentThread().getName()+":"+i);

}

}

};//Thread t = new Thread(r,"匿名內部類線程");//t.start();

new Thread(r,"匿名內部類線程").start();

}

}

CreateThread3.java

總結

以上是生活随笔為你收集整理的java线程三种方法,Java基础_线程的使用及创建线程的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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