摘要:線程是指進程中的一個執(zhí)行流程,一個進程中可以運行多個線程。線程總是屬于某個進程,進程中的多個線程共享進程的內(nèi)存。的使用是開始線程的標志。也是線程的生命周期開始的地方。無論用前面的那種方式使用線程。
Java基礎(chǔ)部分 —— 線程
進程是指一個內(nèi)存中運行的應(yīng)用程序,每個進程都有自己獨立的一塊內(nèi)存空間,一個進程中可以啟動多個線程。比如在Windows系統(tǒng)中,一個運行的exe就是一個進程。
線程是指進程中的一個執(zhí)行流程,一個進程中可以運行多個線程。比如java.exe進程中可以運行很多線程。線程總是屬于某個進程,進程中的多個線程共享進程的內(nèi)存。
總的來講,主要涉及三個點“同時”執(zhí)行是人的感覺,在線程之間實際上輪換執(zhí)行
Thread 類
Runnable接口
run() 方法 和 start() 方法
所有在線程要做的事,即線程體,都寫在run()方法里面,等待調(diào)用,這部分往往處理網(wǎng)絡(luò)通信和數(shù)據(jù)庫處理。
start()的使用是開始線程的標志。也是線程的生命周期開始的地方。無論用前面的那種方式使用線程。
舉例使用線程使用Runnable實現(xiàn)
/** * 實現(xiàn)Runnable接口的類 */ public class DoSomething implements Runnable { private String name; public DoSomething(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { for (long k = 0; k < 100000000; k++) ; System.out.println(name + ": " + i); } } } /** * 測試Runnable類實現(xiàn)的多線程程序 */ public class TestRunnable { public static void main(String[] args) { DoSomething ds1 = new DoSomething("阿三"); DoSomething ds2 = new DoSomething("李四"); Thread t1 = new Thread(ds1); Thread t2 = new Thread(ds2); t1.start(); t2.start(); } }
使用Thread類實現(xiàn):
/** * 測試擴展Thread類實現(xiàn)的多線程程序 */ public class TestThread extends Thread{ public TestThread(String name) { super(name); } public void run() { for(int i = 0;i<5;i++){ for(long k= 0; k <100000000;k++); System.out.println(this.getName()+" :"+i); } } public static void main(String[] args) { Thread t1 = new TestThread("阿三"); Thread t2 = new TestThread("李四"); t1.start(); t2.start(); } }
在整個Java線程中,實現(xiàn)并不是最難的,相反,線程有要注意的幾個難點:
線程的生命周期
線程的優(yōu)先級與線程調(diào)度
線程同步
定時器定時任務(wù):Java中Timer和TimerTask的使用
Future接口Java程序執(zhí)行超時——Future接口介紹
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64147.html
摘要:線程競爭會引起各種不同的問題,為了分析這些這些問題,你需要使用,能給你提供每個線程的精確狀態(tài)信息。使用怎樣解決問題示例當利用率高的異常提取獲取最高使用率的線程。當與的連接保持在不正常的狀態(tài),線程將等待直到超時。 注: 該文章的原文是由 Tae Jin Gu 編寫,原文地址為 How to Analyze Java Thread Dumps 當有障礙,或者是一個基于 JAVA ...
摘要:如圖所示,帶有的所有線程構(gòu)造方法都可以定義線程組的。線程組還能統(tǒng)一設(shè)置組內(nèi)所有線程的最高優(yōu)先級,線程單獨設(shè)置的優(yōu)先級不會高于線程組設(shè)置的最大優(yōu)先級。 前面的文章,棧長和大家分享過多線程創(chuàng)建的3種方式《實現(xiàn) Java 多線程的 3 種方式》。 但如果線程很多的情況下,你知道如何對它們進行分組嗎? 和 Dubbo 的服務(wù)分組一樣,Java 可以對相同性質(zhì)的線程進行分組。 來看下線程類 Th...
摘要:線程的優(yōu)先級代表線程的優(yōu)先級為線程代表線程為,而代表該線程對應(yīng)的操作系統(tǒng)級別的線程。若是有運行圖形界面的環(huán)境,也可以使用一些圖形化的工具,例如來生成線程棧文件。使用線程棧定位問題發(fā)現(xiàn)死鎖當兩個或多個線程正在等待被對方占有的鎖,死鎖就會發(fā)生。 什么是線程棧(thread dump) 線程棧是某個時間點,JVM所有線程的活動狀態(tài)的一個匯總;通過線程棧,可以查看某個時間點,各個線程正在做什么...
摘要:線程堆棧最擅長與分析如下類型問題系統(tǒng)無緣無故過高。性能瓶頸如無法充分利用等線程死鎖死循環(huán),餓死等。由于線程數(shù)量太多導(dǎo)致系統(tǒng)失敗如無法創(chuàng)建線程等。注意死鎖的兩個或多個線程是不消耗的,有的人認為的使用率是線程死鎖導(dǎo)致的,這個說法是完全錯誤的。 不知覺間工作已有一年了,閑下來的時候總會思考下,作為一名Java程序員,不能一直停留在開發(fā)業(yè)務(wù)使用框架上面。老話說得好,機會是留給有準備的人的,因此...
摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)源碼無學(xué)習(xí)源碼第一章課前準備前言課程說明比較和這兩種線程創(chuàng)建的方式,需要知道和的基本創(chuàng)建方式。一旦主線程獲取到了用戶的輸入,這時候,阻塞就會解除掉,主線程繼續(xù)運行,直到結(jié)束。 時間:2017年07月08日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://g...
摘要:最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的多線程的文章,除了書籍沒有什么學(xué)習(xí)多線程的一系列文章。將此線程標記為線程或用戶線程。 最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的Java多線程的文章,除了書籍沒有什么學(xué)習(xí)多線程的一系列文章。但是僅僅憑借一兩篇文章很難對多線程有系統(tǒng)的學(xué)習(xí),而且面試的時候多線程這方面的知識往往也是考察的重點,所以考慮之下決定寫一系列關(guān)于Java多線程的文章...
閱讀 1991·2021-09-26 10:19
閱讀 3267·2021-09-24 10:25
閱讀 1654·2019-12-27 11:39
閱讀 1937·2019-08-30 15:43
閱讀 683·2019-08-29 16:08
閱讀 3515·2019-08-29 16:07
閱讀 915·2019-08-26 11:30
閱讀 1279·2019-08-26 10:41