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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

多线程的三种实现

發(fā)布時(shí)間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程的三种实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、java多線(xiàn)程增強(qiáng)

java多線(xiàn)程基本知識(shí)

20.1進(jìn)程介紹

???? 不管是我們開(kāi)發(fā)的應(yīng)用程序,還是我們運(yùn)行的其他的應(yīng)用程序,都需要先把程序安裝在本地的硬盤(pán)上。然后找到這個(gè)程序的啟動(dòng)文件,啟動(dòng)程序的時(shí)候,其實(shí)是電腦把當(dāng)前的這個(gè)程序加載到內(nèi)存中,在內(nèi)存中需要給當(dāng)前的程序分配一段獨(dú)立的運(yùn)行空間。這片空間就專(zhuān)門(mén)負(fù)責(zé)當(dāng)前這個(gè)程序的運(yùn)行。

???? 不同的應(yīng)用程序運(yùn)行的過(guò)程中都需要在內(nèi)存中分配自己獨(dú)立的運(yùn)行空間,彼此之間不會(huì)相互的影響。我們把每個(gè)獨(dú)立應(yīng)用程序在內(nèi)存的獨(dú)立空間稱(chēng)為當(dāng)前應(yīng)用程序運(yùn)行的一個(gè)進(jìn)程。

進(jìn)程:它是內(nèi)存中的一段獨(dú)立的空間,可以負(fù)責(zé)當(dāng)前應(yīng)用程序的運(yùn)行。當(dāng)前這個(gè)進(jìn)程負(fù)責(zé)調(diào)度當(dāng)前程序中的所有運(yùn)行細(xì)節(jié)。

20.2線(xiàn)程介紹

???? 啟動(dòng)的QQ聊天軟件,需要和多個(gè)人進(jìn)行聊天。這時(shí)多個(gè)人之間是不能相互影響,但是它們都位于當(dāng)前QQ這個(gè)軟件運(yùn)行時(shí)所分配的內(nèi)容的獨(dú)立空間中。

???? 在一個(gè)進(jìn)程中,每個(gè)獨(dú)立的功能都需要獨(dú)立的去運(yùn)行,這時(shí)又需要把當(dāng)前這個(gè)進(jìn)程劃分成多個(gè)運(yùn)行區(qū)域,每個(gè)獨(dú)立的小區(qū)域(小單元)稱(chēng)為一個(gè)線(xiàn)程。

線(xiàn)程:它是位于進(jìn)程中,負(fù)責(zé)當(dāng)前進(jìn)程中的某個(gè)具備獨(dú)立運(yùn)行資格的空間。

進(jìn)程是負(fù)責(zé)整個(gè)程序的運(yùn)行,而線(xiàn)程是程序中具體的某個(gè)獨(dú)立功能的運(yùn)行。一個(gè)進(jìn)程中至少應(yīng)該有一個(gè)線(xiàn)程。

20.3多線(xiàn)程介紹

???? 現(xiàn)在的操作系統(tǒng)基本都是多用戶(hù),多任務(wù)的操作系統(tǒng)。每個(gè)任務(wù)就是一個(gè)進(jìn)程。而在這個(gè)進(jìn)程中就會(huì)有線(xiàn)程。

???? 真正可以完成程序運(yùn)行和功能的實(shí)現(xiàn)靠的是進(jìn)程中的線(xiàn)程。

多線(xiàn)程:在一個(gè)進(jìn)程中,我們同時(shí)開(kāi)啟多個(gè)線(xiàn)程,讓多個(gè)線(xiàn)程同時(shí)去完成某些任務(wù)(功能)。

多線(xiàn)程的目的:提高程序的運(yùn)行效率。

20.4多線(xiàn)程運(yùn)行的原理

???? cpu在線(xiàn)程中做時(shí)間片的切換。

?

???? 其實(shí)真正電腦中的程序的運(yùn)行不是同時(shí)在運(yùn)行的。CPU負(fù)責(zé)程序的運(yùn)行,而CPU在運(yùn)行程序的過(guò)程中某個(gè)時(shí)刻點(diǎn)上,它其實(shí)只能運(yùn)行一個(gè)程序。而不是多個(gè)程序。而CPU它可以在多個(gè)程序之間進(jìn)行高速的切換。而切換頻率和速度太快,導(dǎo)致人的肉看看不到。

每個(gè)程序就是進(jìn)程, 而每個(gè)進(jìn)程中會(huì)有多個(gè)線(xiàn)程,而CPU是在這些線(xiàn)程之間進(jìn)行切換。

了解了CPU對(duì)一個(gè)任務(wù)的執(zhí)行過(guò)程,我們就必須知道,多線(xiàn)程可以提高程序的運(yùn)行效率,但不能無(wú)限制的開(kāi)線(xiàn)程。

20.5實(shí)現(xiàn)線(xiàn)程的兩種方式

1、繼承Thread的原理

???????? 見(jiàn)代碼MyThreadWithExtends

package thread1;

?

import java.util.Random;

?

public class MyThreadWithExtends extends Thread {

??? String flag;

???

??? public MyThreadWithExtends(String flag) {

???????? this.flag = flag;

???? }

???

??? @Override

??? public void run() {

??? //獲取當(dāng)前線(xiàn)程的線(xiàn)程名

??? String tname = Thread.currentThread().getName();

??? System.out.println(tname + "線(xiàn)程的run方法被調(diào)用....");

??? Random random = new Random();

??? for (int i = 0; i < 20; i++) {

????????????? try {

?????????????????? Thread.sleep(random.nextInt(10) * 100);

?????????????????? System.out.println(tname + "...."? + flag);

????????????? } catch (Exception e) {

?????????????????? e.printStackTrace();

????????????? }

???????? }

??? }

???

??? public static void main(String[] args) {

???????? Thread thread1 = new MyThreadWithExtends("a");

???????? Thread thread2 = new MyThreadWithExtends("b");

???????? thread1.start();

???????? thread2.start();

???? }

}

?

2、聲明實(shí)現(xiàn) Runnable 接口的類(lèi)

???????? 見(jiàn)代碼MyThreadWithImpliment

package thread1;

?

public class MyThreadWithImpliment implements Runnable {

???? int x;

????

???? public MyThreadWithImpliment(int x) {

???????? this.x = x;

???? }

????

???? @Override

???? public void run() {

???????? String name = Thread.currentThread().getName();

???????? System.out.println("線(xiàn)程" + name + "run方法被調(diào)用....");

???????? for (int i = 0; i < 10; i++) {

????????????? System.out.println(x);

????????????? try {

?????????????????? Thread.sleep(100);

????????????? } catch (Exception e) {

?????????????????? e.printStackTrace();

????????????? }

???????? }

???? }

?

???? public static void main(String[] args) {

???????? Thread thread1 = new Thread(new MyThreadWithImpliment(1),"thread-1");

???????? Thread thread2 = new Thread(new MyThreadWithImpliment(2),"thread-2");

???????? thread1.start();

???????? thread2.start();

???? }

}

?

3、還可以實(shí)現(xiàn)Callable接口

總結(jié)

以上是生活随笔為你收集整理的多线程的三种实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。