日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
看完這篇Java多線程的講解,思路突然就清晰了...

線程是進(jìn)程中的一個(gè)獨(dú)立控制單元,線程在控制著進(jìn)程的執(zhí)行,一個(gè)進(jìn)程中至少有一個(gè)線程。多線程可以更好地利用cpu的資源,線程之間還能進(jìn)行數(shù)據(jù)共享。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括撫順縣網(wǎng)站建設(shè)、撫順縣網(wǎng)站制作、撫順縣網(wǎng)頁(yè)制作以及撫順縣網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,撫順縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到撫順縣省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

在Java中,一個(gè)線程是指進(jìn)程中的一個(gè)執(zhí)行流程,一個(gè)進(jìn)程可以運(yùn)行多個(gè)線程,Java中每個(gè)線程都有一個(gè)調(diào)用棧,即使不在程序中創(chuàng)建任何新的線程,也有一個(gè)main()方法運(yùn)行在一個(gè)線程內(nèi),稱為主線程,一旦創(chuàng)建一個(gè)新的線程,就產(chǎn)生一個(gè)新的調(diào)用棧。

多線程的基本概念

線程指進(jìn)程中的一個(gè)執(zhí)行場(chǎng)景,也就是執(zhí)行流程,那么進(jìn)程和線程有什么區(qū)別呢?

  • 每個(gè)進(jìn)程是一個(gè)應(yīng)用程序,都有獨(dú)立的內(nèi)存空間
  • 同一個(gè)進(jìn)程中的線程共享其進(jìn)程中的內(nèi)存和資源

(共享的內(nèi)存是堆內(nèi)存和方法區(qū)內(nèi)存,棧內(nèi)存不共享,每個(gè)線程有自己的。)

什么是進(jìn)程?

一個(gè)進(jìn)程就是一個(gè)應(yīng)用程序。在操作系統(tǒng)中每啟動(dòng)一個(gè)應(yīng)用程序就會(huì)相應(yīng)的啟動(dòng)一個(gè)進(jìn)程。例如:千千靜聽(tīng)進(jìn)程,魔獸進(jìn)程,Word 進(jìn)程,QQ 進(jìn)程,JVM 啟動(dòng)對(duì)應(yīng)一個(gè)進(jìn)程。

系統(tǒng)引入多進(jìn)程的作用?

最初的計(jì)算機(jī)是“單進(jìn)程的”,計(jì)算機(jī)只能運(yùn)行一個(gè)應(yīng)用程序,例如第一臺(tái)計(jì)算機(jī)只有DOS 窗口?,F(xiàn)代的計(jì)算機(jī)可以滿足我們一邊聽(tīng)音樂(lè),一邊玩游戲。現(xiàn)代的計(jì)算給我們?nèi)祟惛杏X(jué):多件事情一起運(yùn)行。感覺(jué)是并行的(錯(cuò)覺(jué))。

對(duì)于單核的計(jì)算機(jī)來(lái)講,在某一個(gè)時(shí)間點(diǎn)上只能做一件事情,但是由于計(jì)算機(jī)的處理速度 很高,多個(gè)進(jìn)程之間完成頻繁的切換執(zhí)行,這個(gè)切換速度使人類產(chǎn)生了錯(cuò)覺(jué),人類的錯(cuò)覺(jué)是:

多個(gè)進(jìn)程在同時(shí)運(yùn)行。

計(jì)算機(jī)引入多進(jìn)程的作用:提高 CPU 的使用率。

  • 重點(diǎn):進(jìn)程和進(jìn)程之間的內(nèi)存獨(dú)立。

什么是線程?

線程是進(jìn)程的一個(gè)執(zhí)行場(chǎng)景。一個(gè)進(jìn)程可以啟動(dòng)多個(gè)線程。

進(jìn)程引入多線程的作用?

提高進(jìn)程的使用率。

  • 重點(diǎn):線程和線程之間棧內(nèi)存獨(dú)立,堆內(nèi)存和方法區(qū)內(nèi)存共享。一個(gè)線程一個(gè)棧。

描述 java 程序的執(zhí)行原理:

java命令執(zhí)行會(huì)啟動(dòng) JVM,JVM的啟動(dòng)表示啟動(dòng)一個(gè)應(yīng)用程序,表示啟動(dòng)了一個(gè)進(jìn)程。該進(jìn)程會(huì)自動(dòng)啟動(dòng)一個(gè)“主線程”,然后主線程負(fù)責(zé)調(diào)用某個(gè)類的 main 方法。所以 main 方法的執(zhí)行是在主線程中執(zhí)行的。然后通過(guò)main 方法代碼的執(zhí)行可以啟動(dòng)其他的“分支線程”。

所以,main 方法結(jié)束程序不一定結(jié)束,因?yàn)槠渌姆种Ь€程有可能還在執(zhí)行。

線程的創(chuàng)建和啟動(dòng)

Java 虛擬機(jī)的主線程入口是main 方法,用戶可以自己創(chuàng)建線程,創(chuàng)建方式有兩種:

  • 繼承 Thread 類
  • 實(shí)現(xiàn)Runnable 接口(推薦使用Runnable 接口)

繼承 Thread 類

Thread 類中創(chuàng)建線程最重要的兩個(gè)方法為:

 
 
 
 
  1. public void run()
  2. public void start()

 采用 Thread 類創(chuàng)建線程,用戶只需要繼承 Thread,覆蓋 Thread 中的run 方法,父類 Thread 中的run 方法沒(méi)有拋出異常,那么子類也不能拋出異常,最后采用start 啟動(dòng)線程即可

【示例代碼】,不使用線程

 
 
 
 
  1.  public class ThreadTest01 {
  2.    
  3. public static void main(String[] args) { Processor p = new Processor(); p.run();
  4. method1();
  5. }
  6. private static void method1() { System.out.println("--------method1()   ");
  7. }
  8. }
  9. class Processor {
  10. public void run() {
  11. for (int i=0; i<10; i++) { System.out.println(i);
  12. }
  13. }
  14. }

以上順序輸出相應(yīng)的結(jié)果(屬于串行),也就是run 方法完全執(zhí)行完成后,才執(zhí)行method1 方法,也就是method1 必須等待前面的方法返回才可以得到執(zhí)行,這是一種“同步編程模型”

【代碼示例】,使用線程

 
 
 
 
  1.  public class ThreadTest02 {
  2. public static void main(String[] args) { Processor p = new Processor();
  3. //手動(dòng)調(diào)用該方法
  4. //不能采用run 來(lái)啟動(dòng)一個(gè)場(chǎng)景(線程),
  5. //run 就是一個(gè)普通方法調(diào)用
  6. //p.run();
  7. //采用start 啟動(dòng)線程,不是直接調(diào)用run
  8. //start 不是馬上執(zhí)行線程,而是使線程進(jìn)入就緒
  9. //線程的正真執(zhí)行是由Java 的線程調(diào)度機(jī)制完成的
  10. p.start();
  11. //只能啟動(dòng)一次
  12. //p.start();
  13. method1();
  14. }
  15. private static void method1() { System.out.println("--------method1()   ");
  16. }
  17. }
  18. class Processor extends Thread {
  19. //覆蓋 Thread 中的run 方法,該方法沒(méi)有異常
  20. //該方法是由java 線程掉機(jī)制調(diào)用的
  21.   //我們不應(yīng)該手動(dòng)調(diào)用該方法public void run() {
  22. for (int i=0; i<10; i++) { System.out.println(i);
  23. }
  24. }
  25. }

通過(guò)輸出結(jié)果大家會(huì)看到,沒(méi)有順序執(zhí)行,而在輸出數(shù)字的同時(shí)執(zhí)行了 method1()方法,如果從效率上看,采用多線程的示例要快些,因?yàn)槲覀兛梢钥醋魉峭瑫r(shí)執(zhí)行的,mthod1()方法沒(méi)有等待前面的操作完成才執(zhí)行,這叫“異步編程模型”

實(shí)現(xiàn) Runnable 接口

其實(shí) Thread 對(duì)象本身就實(shí)現(xiàn)了Runnable 接口,但一般建議直接使用 Runnable接口來(lái)寫(xiě)多線程程序,因?yàn)榻涌跁?huì)比類帶來(lái)更多的好處

【示例代碼】

 
 
 
 
  1. public class ThreadTest03 {
  2. public static void main(String[] args) {
  3. //Processor r1 = new Processor(); Runnable r1 = new Processor();
  4. //不能直接調(diào)用run
  5. //p.run();
  6. Thread t1 = new Thread(r1);
  7.   
  8. //啟動(dòng)線程t1.start();
  9. method1();
  10. }
  11. private static void method1() { System.out.println("--------method1()   ");
  12. }
  13. }
  14. //實(shí)現(xiàn)Runnable 接口
  15. class Processor implements Runnable {
  16. //實(shí)現(xiàn)Runnable 中的run 方法
  17. public void run() {
  18. for (int i=0; i<10; i++) { System.out.println(i);
  19. }
  20. }
  21. }

網(wǎng)頁(yè)題目:看完這篇Java多線程的講解,思路突然就清晰了...
瀏覽地址:http://www.5511xx.com/article/dhgpdpj.html