国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

線程基礎(chǔ):線程(1)——操作系統(tǒng)和線程原理

2019-11-08 03:27:10
字體:
供稿:網(wǎng)友

1、概述

我在寫“系統(tǒng)間通信技術(shù)專欄”的時(shí)候,收到很多讀者的反饋。其中有一部分讀者希望我抽空寫一寫自己關(guān)于對(duì)java線程的使用經(jīng)驗(yàn)和總結(jié)。巧的是,這個(gè)月我所在的技術(shù)團(tuán)隊(duì)也有很多同事跟我討論關(guān)于JAVA中線程的操作。正好本月我工作也不是很忙,除了繼續(xù)推進(jìn)我的重點(diǎn)專欄“系統(tǒng)間通信技術(shù)”外,可以更多的空余時(shí)間跟各位讀者分享自己對(duì)JAVA線程技術(shù)的理解和使用經(jīng)驗(yàn)。

本人不才,應(yīng)讀者要求新開專欄,與各位讀者分享自己對(duì)JAVA線程技術(shù)的理解和使用經(jīng)驗(yàn)。這個(gè)專欄將分成兩個(gè)部分:線程基礎(chǔ)知識(shí)和鎖知識(shí)。專欄的難度應(yīng)該是我所開專欄中難度最低的一個(gè),著重于線程基礎(chǔ)知識(shí)的講解,更適合JAVA初學(xué)者閱讀,目的是希望能夠幫助大家提高codeing水平和程序質(zhì)量。如果您是經(jīng)驗(yàn)老道的高手也歡迎和本人討論相關(guān)問題,對(duì)本人文章的論點(diǎn)進(jìn)行勘誤,您的支持是我寫作的關(guān)鍵動(dòng)力。當(dāng)然本人的更多精力還是放在繼續(xù)完成“系統(tǒng)間通信技術(shù)”這個(gè)專欄。(本系列的博客文章將不會(huì)置頂)

2、操作系統(tǒng)和線程原理

線程是一個(gè)操作系統(tǒng)級(jí)別的概念。JAVA語(yǔ)言(包括其他編程語(yǔ)言)本身不創(chuàng)建線程;而是調(diào)用操作系統(tǒng)層提供的接口創(chuàng)建、控制、銷毀線程實(shí)例。

這里寫圖片描述

首先要說明的是,根據(jù)操作系統(tǒng)的不同(Windows/Unix/linux/其他),他們所支持的線程底層實(shí)現(xiàn)和操作效果也是不盡相同的。不過一個(gè)操作系統(tǒng)支持的線程至少會(huì)有四種狀態(tài):就緒、執(zhí)行、阻塞和終結(jié)。線程在四種狀態(tài)下進(jìn)行切換,都是要消耗不少的CPU計(jì)算能力的

并且根據(jù)操作系統(tǒng)使用線程的進(jìn)程的不一樣,線程還分為用戶線程和操作系統(tǒng)線程。操作系統(tǒng)線程(內(nèi)核線程),是指操作系統(tǒng)內(nèi)核為了完成硬件接口層操作,由操作系統(tǒng)內(nèi)核創(chuàng)建的線程:例如I/O操作的內(nèi)核線程,這些線程應(yīng)用程序是不能干預(yù)的;用戶線程,是指用戶安裝/管理的應(yīng)用程序,為執(zhí)行某一種操作,而由這個(gè)應(yīng)用程序創(chuàng)建的線程。后文我們討論的JAVA線程,都是用戶級(jí)線程

線程在創(chuàng)建時(shí),操作系統(tǒng)不會(huì)為這個(gè)線程分配獨(dú)立的資源(除了必要的數(shù)據(jù)支撐)。一個(gè)應(yīng)用程序(進(jìn)程)下的所有線程,都是共享這個(gè)應(yīng)用程序(進(jìn)程)中的資源,例如這個(gè)應(yīng)用程序的CPU資源、I/O資源、內(nèi)存資源。

現(xiàn)在基本上主流操作系統(tǒng)都支持多線程實(shí)現(xiàn)。即一個(gè)應(yīng)用程序中(一個(gè)進(jìn)程中),可以創(chuàng)建多個(gè)線程。一個(gè)應(yīng)用程序下,各個(gè)線程間都可以進(jìn)行通訊、可以進(jìn)行狀態(tài)互操作。且一個(gè)進(jìn)程中,至少有一個(gè)線程存在。

3、JAVA中最簡(jiǎn)單的線程示例

JAVA中提供了豐富的操作系統(tǒng)接口實(shí)現(xiàn),幫助我們進(jìn)行線程操作。這些實(shí)現(xiàn)分布在java的java.lang基礎(chǔ)包、java.io基礎(chǔ)包和java.util.concurrent工具包當(dāng)中;這個(gè)專欄所涉及到的代碼示例也會(huì)從易到難向大家進(jìn)行演示。我們先來看看JAVA中最基本的線程操作實(shí)現(xiàn)(高手請(qǐng)繞行)。

3-1、Thread父類

java.lang.Thread類是JAVA中用于實(shí)現(xiàn)線程操作的最基本的類之一。您可以創(chuàng)建一個(gè)集成Thread類的子類來定義您自己的線程實(shí)現(xiàn):

package test.thread.base;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.log4j.BasicConfigurator;public class MyDefindThread extends Thread { static { BasicConfigurator.configure(); } /** * 日志。一定要使用Log4j才行。否則你就用System.out吧 */ PRivate static final Log LOGGER= LogFactory.getLog(MyDefindThread.class); /* (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { Long threadId = this.getId(); MyDefindThread.LOGGER.info("線程(" + threadId + ")做了一些事情,然后結(jié)束了。"); } public static void main(String[] args) throws Exception { new MyDefindThread().start(); }}123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930

3-2、Runable接口

除了可以繼承java.lang.Thread類來定義自己的線程外,您還可以實(shí)現(xiàn)java.lang.Runnable接口來定義一個(gè)線程(一般情況,我們優(yōu)先使用這種方式):

package test.thread.base;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.log4j.BasicConfigurator;public class MyDefindRunnable implements Runnable { static { BasicConfigurator.configure(); } /** * 日志。一定要使用Log4j才行。否則你就用System.out吧 */ private static final Log LOGGER= LogFactory.getLog(MyDefindThread.class); /* (non-Javadoc) * @see java.lang.Runnable#run() */ @Override public void run() { // 獲取當(dāng)前線程的ID long threadId = Thread.currentThread().getId(); MyDefindRunnable.LOGGER.info("線程(" + threadId + ")做了一些事情,然后結(jié)束了。"); } public static void main(String[] args) throws Exception { new Thread(new MyDefindRunnable()).start(); }}1234567891011121314151617181920212223242526272829303112345678910111213141516171819202122232425262728293031

以上的兩段代碼都沒有太多可講解的。您可以在調(diào)試環(huán)境下觀察到JAVA應(yīng)用程序是如何運(yùn)行線程的:

這里寫圖片描述

4、下文介紹

下一篇文章中,我們將繼續(xù)介紹Java所支持的線程間基本互操作,包括:阻塞、喚醒、終止等操作;然后介紹Java原生線程池的工作原理和基本操作。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永清县| 密山市| 从化市| 阳山县| 东乡| 乡宁县| 浠水县| 甘谷县| 绥化市| 广饶县| 安塞县| 望江县| 绿春县| 苍溪县| 兴宁市| 神农架林区| 延津县| 寻乌县| 敖汉旗| 剑川县| 镇原县| 陈巴尔虎旗| 宁乡县| 秦安县| 乌兰浩特市| 简阳市| 怀仁县| 枞阳县| 长治县| 高陵县| 辽源市| 乐至县| 新余市| 浙江省| 南木林县| 和平县| 南岸区| 绥中县| 微山县| 大渡口区| 德阳市|