成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

夯實Java基礎(chǔ),一篇文章全解析線程問題

開發(fā) 前端
進(jìn)程是資源分配的最小單位,而線程是CPU調(diào)度的最小單位。每一個進(jìn)程中至少有一個線程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源,多個線程可以完成多個不同的任務(wù),也就是我們常說的并發(fā)多線程。

1. 線程是什么

操作系統(tǒng)支持多個應(yīng)用程序并發(fā)執(zhí)行,每個應(yīng)用程序至少對應(yīng)一個進(jìn)程 ,彼此之間的操作和數(shù)據(jù)不受干擾,彼此通信一般采用管道通信、消息隊列、共享內(nèi)存等方式。當(dāng)一個進(jìn)程需要磁盤IO的時候,CPU就切換到另外的進(jìn)程,提高了CPU利用率。

有了進(jìn)程,為什么還要線程?因為進(jìn)程的成本太高了。

啟動新的進(jìn)程必須分配獨立的內(nèi)存空間,建立數(shù)據(jù)表維護(hù)它的代碼段、堆棧段和數(shù)據(jù)段,這是昂貴的多任務(wù)工作方式。線程可以看作輕量化的進(jìn)程。線程之間使用相同的地址空間,切換線程的時間遠(yuǎn)小于切換進(jìn)程的時間。

進(jìn)程是資源分配的最小單位,而線程是CPU調(diào)度的最小單位。每一個進(jìn)程中至少有一個線程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源,多個線程可以完成多個不同的任務(wù),也就是我們常說的并發(fā)多線程。

2. 怎樣創(chuàng)建線程

創(chuàng)建線程常用的有四種方式,分別是:

  • 繼承Thread類
  • 實現(xiàn)Runnable接口
  • 實現(xiàn)Callable接口
  • 使用線程池創(chuàng)建

分別看一下怎么具體怎么使用代碼創(chuàng)建的?

2.1 繼承Thread類

public class ThreadDemo {

public static void main(String[] args){
Thread thread = new MyThread();
thread.start(); // 啟動線程
}
}

class MyThread extends Thread {
@Override
public void run(){
System.out.println("關(guān)注公眾號:一燈架構(gòu)");
}
}

輸出結(jié)果:

關(guān)注公眾號:一燈架構(gòu)

start方法用來啟動線程,只能被調(diào)用一次。

run方法是線程的核心方法,業(yè)務(wù)邏輯都寫在run方法中。

2.2 實現(xiàn)Runnable接口

public class ThreadDemo {

public static void main(String[] args){
MyRunnable myRunnable = new MyRunnable();
Thread thread1 = new Thread(myRunnable, "線程1");
Thread thread2 = new Thread(myRunnable, "線程2");
thread1.start(); // 啟動線程1
thread2.start(); // 啟動線程2
}
}

class MyRunnable implements Runnable {
private int count = 5;

@Override
public void run(){
while (count > 0) {
System.out.println(Thread.currentThread().getName()
+ ",關(guān)注公眾號:一燈架構(gòu)," + count--);
}
}
}

輸出結(jié)果:

線程2,關(guān)注公眾號:一燈架構(gòu),4
線程1,關(guān)注公眾號:一燈架構(gòu),5
線程1,關(guān)注公眾號:一燈架構(gòu),2
線程1,關(guān)注公眾號:一燈架構(gòu),1
線程2,關(guān)注公眾號:一燈架構(gòu),3

需要把Runnable實例放到Thread類中,才能執(zhí)行,Thread對象才是真正的線程對象。

使用實現(xiàn)Runnable接口創(chuàng)建線程方式,相比繼承Thread類創(chuàng)建線程,優(yōu)點是:

  • 實現(xiàn)的方式?jīng)]有類的單繼承性的局限性
  • 實現(xiàn)的方式更適合來處理多個線程有共享數(shù)據(jù)的情況

2.3 實現(xiàn)Callable接口

public class ThreadTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<String>(myCallable);
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get());
}
}

class MyCallable implements Callable {
@Override
public String call() throws Exception {
return "關(guān)注公眾號:一燈架構(gòu)";
}
}

輸出結(jié)果:

關(guān)注公眾號:一燈架構(gòu)

實現(xiàn)Callable接口的線程實例對象,配合FutureTask使用,可以接收返回值。

2.4 使用線程池創(chuàng)建

public class ThreadDemo {

public static void main(String[] args){
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(() -> System.out.println("關(guān)注公眾號:一燈架構(gòu)"));
}
}

輸出結(jié)果:

關(guān)注公眾號:一燈架構(gòu)

使用線程池創(chuàng)建線程是工作開發(fā)中最常用的方式,優(yōu)點是:

  • 線程池幫忙管理對象的創(chuàng)建與銷毀,減輕開發(fā)者工作量
  • 線程池幫忙管理任務(wù)的調(diào)用,資源的創(chuàng)建與分配
  • 復(fù)用線程和對象,提高使用效率

3. 線程的狀態(tài)

線程共有6種狀態(tài),分別是NEW(初始化)、RUNNABLE(可運行)、WAITING(等待)、TIMED_WAITING(超時等待)、BLOCKED(阻塞)、TERMINATED(終止)。

  • NEW(初始化)

表示創(chuàng)建線程對象之后,還沒有調(diào)用start方法。

  • RUNNABLE(可運行)

表示調(diào)用start方法之后,等待CPU調(diào)度。為了便于理解,通常又把RUNNABLE分別RUNNING(運行中)和READY(就緒)。處在RUNNING(運行中)狀態(tài)的線程可以調(diào)用yield方法,讓出CPU時間片,然后跟其他處于READY(就緒)一起等待被調(diào)度。

  • WAITING(等待)

處于RUNNABLE狀態(tài)的線程調(diào)用wait方法之后,就處于等待狀態(tài),需要其他線程顯示地喚醒。

  • TIMED_WAITING(超時等待)

處于RUNNABLE狀態(tài)的線程調(diào)用wait(long)方法之后,就處于等待狀態(tài),需要其他線程顯示地喚醒。

  • BLOCKED(阻塞)

等待進(jìn)入synchronized方法/代碼塊,處于阻塞狀態(tài)。

  • TERMINATED(終止)

表示線程已經(jīng)執(zhí)行結(jié)束。

圖片

4. 線程常用方法

說一下線程有哪些常用的方法。

方法定義

含義

使用方式

public synchronized void start() {……}

啟動線程

MyThread myThread = new MyThread();

myThread.start();

public static native Thread currentThread();

獲取當(dāng)前線程實例對象

Thread thread = Thread.currentThread();

public static native void yield();

讓出CPU時間片

Thread.yield();

public static native void sleep(long millis);

睡眠指定時間

Thread.sleep(1L);

public void interrupt() {……}

中斷線程

MyThread myThread = new MyThread();

myThread.interrupt();

public static boolean interrupted() {……}

判斷線程是否已中斷

MyThread myThread = new MyThread();

boolean interrupted = myThread.isInterrupted();

public final native boolean isAlive();

判斷線程是否是存活狀態(tài)

MyThread myThread = new MyThread();

boolean alive = myThread.isAlive();

public final String getName() {……}

獲取線程名稱

MyThread myThread = new MyThread();

String name = myThread.getName();

public State getState() {……}

獲取線程狀態(tài)

MyThread myThread = new MyThread();

Thread.State state = myThread.getState();

public long getId() {……}

獲取線程ID

MyThread myThread = new MyThread();

long id = myThread.getId();

public final void join() {……}

等待其他線程執(zhí)行完再執(zhí)行

MyThread myThread = new MyThread();

myThread.join();

責(zé)任編輯:武曉燕 來源: 一燈架構(gòu)
相關(guān)推薦

2021-07-01 10:01:16

JavaLinkedList集合

2019-09-24 14:19:12

PythonC語言文章

2021-05-15 09:18:04

Python進(jìn)程

2020-11-13 08:14:28

JavaScript

2023-06-21 00:10:17

JSONWeb服務(wù)器JavaScript

2020-10-09 08:15:11

JsBridge

2020-12-29 09:05:48

基礎(chǔ)DjangoORM

2023-05-08 08:21:15

JavaNIO編程

2021-05-14 10:28:54

線程協(xié)程數(shù)量

2021-02-15 13:38:38

多線程異步模型

2022-08-09 08:00:55

AWS安全API

2017-09-05 08:52:37

Git程序員命令

2022-02-21 09:44:45

Git開源分布式

2019-04-17 15:16:00

Sparkshuffle算法

2024-06-25 08:18:55

2021-06-30 00:20:12

Hangfire.NET平臺

2023-05-12 08:19:12

Netty程序框架

2021-04-09 08:40:51

網(wǎng)絡(luò)保險網(wǎng)絡(luò)安全網(wǎng)絡(luò)風(fēng)險

2017-09-04 13:44:00

Java

2020-10-22 08:33:22

Go語言
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产在线区 | 国产日韩av一区二区 | 五月天激情综合网 | 国产免费一区二区三区网站免费 | 正在播放国产精品 | 国产成人一区二区三区 | 男女下面一进一出网站 | aa级毛片毛片免费观看久 | 九九热九九| 男人的天堂久久 | 亚洲精品免费视频 | 日韩成人在线免费视频 | 久久久成人一区二区免费影院 | 亚洲国产精品网站 | 国产精品毛片一区二区三区 | 国产中文区二幕区2012 | 亚洲精品视频导航 | 在线看av网址 | 国产日韩一区二区三免费 | www亚洲成人| 亚洲欧美激情四射 | 久久精品国产免费 | 在线观看中文字幕一区二区 | 天天干天天玩天天操 | 亚洲国产精品人人爽夜夜爽 | 亚洲国产成人av好男人在线观看 | 黄色在线观看网址 | 欧美在线精品一区 | 四虎影院新地址 | 美女在线观看av | 亚洲欧美一区二区三区在线 | 免费黄色大片 | 久久99精品久久久久久国产越南 | 免费v片| 亚洲欧美中文字幕在线观看 | 颜色网站在线观看 | 56pao在线| 色资源在线 | 欧美成人精品二区三区99精品 | 久久国产精品99久久久久久丝袜 | 91精品国产综合久久久久久 |