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基础_线程的使用及创建线程的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 折痕极小!曝OPPO大折叠屏新机将推出
- 下一篇: php特殊字符转化函数,PHP函数将Un