溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中多線程怎么實現

發布時間:2022-01-10 09:21:49 來源:億速云 閱讀:190 作者:iii 欄目:編程語言

這篇文章主要講解了“Java中多線程怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中多線程怎么實現”吧!

線程是一些可以并行的,獨立的執行的代碼.之前我編的程序都只能做一件事情,也就是只有一個線程.多線程的編程就是可以將程序任務分成多個并行的子任務,同時運行,互不干擾.我對多線程的理解是從格斗游戲得來的.格斗游戲中兩人對打就是通過兩個線程來實現的吧,否則如何能夠你出你的招,我發我的沖擊波呢.

(1月18日)突然想到一個問題,補充一下.多線程是不是我們通常所說的多任務呢?我的理解是,不能這樣說也可以這樣說.
  簡單說來,多線程提供了一種在進程內部進行多個線程并行調度的機制,而多任務則提供的是在一個操作系統內部運行多個進程的機制.
  多任務操作系統(如windows)的基本原理是這樣的:操作系統將cpu的時間片分配給多個線程,每個線程在操作系統指定的時間片內完成(注意,這里的多個線程是分屬于不同進程的).操作系統不斷的從一個線程的執行切換到另一個線程的執行,如此往復,宏觀上看來,就好像是多個線程在一起執行.由于這多個線程分屬于不同的進程,因此在我們看來,就好像是多個進程在同時執行,這樣就實現了多任務.Whoops,真繞口.
  如上,多線程和多任務是有很明顯的區別的.但是再想一下,在一個應用程序內實現多線程不也是靠CPU分配時間片嗎?既然原理是相同的,那么多線程也可以說是多任務的.


一個Java程序啟動后,就已經有一個線程在運行,我們可以通過下面的例子來初步建立一個線程的實際印象

class testthread{
  public static void main(String args[]){
  Thread t=Thread.currentThread();
  t.setName("This Thread is running");
  System.out.println("The running thead:"+t);
  try{
  for(int i=0;i<5;i++)
  {
  System.out.println("Sleep time"+i);
  Thread.sleep(1000);//掛起線程,就是讓線程休息一會兒,不占用系統資源,因此其它線程可以繼續.這里的Thread缺省表示主線程
  }
  }catch(InterruptedException e){System.out.println("thread has wrong");}
  }
}


  這只是一個線程,那么我們怎么實現多個線程呢?又怎樣讓線程做我安排它要做的事情呢?
  實現線程體的構造有兩種方法.
  第一種方法是通過繼承構造線程體.
  在Java中專門有一個Thread類,這個類里面有一個函數run(),里面記錄著線程要完成的操作,就好像通常所說的主函數main()一樣,run()函數運行完了,線程就結束了.通過繼承這個類,我們可以定義我們自己的線程,在run函數中告訴它該做什么事情.下面的程序就是繼承了一個SimpleThread類,用兩個線程來輸出HelloWorld.

public class TwoThread{

  public static void main(String args[]){
  new SimpleThread("HelloWorld1").start();//創建兩個線程的實例,就這么簡單
  new SimpleThread("HelloWorld2").start();
  }

}
  class SimpleThread extends Thread{ file://真正的內容在這里
  public SimpleThread(String str){
  super(str);//super代表SimpleThread類的直接父類,這里就是Thread
  }

file://我們要線程做的事情都在這里了
  public void run(){
  for(int i=0;i<10;i++){
  System.out.println(i+" "+getName());
  try{
  sleep((int)(Math.random()*1000));
  }catch(InterruptedException e){}
  }
  System.out.println("Done!"+getName()); 
  }
}

運行的結果是兩個線程交替顯示各自的HelloWorld十次,輸出是混在一起的,因為兩個線程是同時運行的.


第二種方法是通過啟動接口構造線程體.在任意實現了啟動接口的類當中,比如下面的twothread類,都可以實現多線程,我所需要做的就是在這個類的定義當中加上一個run函數.例程如下

class TwoThread implements Runnable{
  TwoThread(){
  Thread t1=Thread.currentThread();
  t1.setName("The first main thread");
  System.out.println("The running thead:"+t1);
  Thread t2=new Thread(this,"the second thread");//注意這里的this,它表明新線程即t2將會做的事情由this對象來決定,也就是由twothread的run函數來決定
  System.out.println("create another thread");
  t2.start();//調用該函數將使線程從run函數開始執行
  try{
  System.out.println("first thread will sleep");
  Thread.sleep(3000);
  }catch(InterruptedException e){System.out.println("first thread has wrong");}
  System.out.println("first thread exit");
  }

  public void run()//定義run()函數,在本程序中也就是t2這個新的線程會做的事情
  {
  try{
  for(int i=0;i<5;i++)
  {
  System.out.println("sleep time for thread 2:"+i);
  Thread.sleep(1000);
  }
  }catch(InterruptedException e){System.out.println("thread has wrong");}
  System.out.println("second thread exit");
  }
  public static void main(String args[]){
  new TwoThread();//觸發構造函數
  }
}

運行的結果如下:
The running rhread:Thread[The first main thread,5,main]
creat another thread
first thread will sleep
Sleep time for thread 2:0
Sleep time for thread 2:1
Sleep time for thread 2:2
first thread exit
Sleep time for thread 2:3
Sleep time for thread 2:4
second thread exit

扯扯別的.我們注意到很多Java程序開頭都有import語句,好像和C的#include和Delphi的uses很象哦.import是Java的關鍵詞,負責調入包(package).包由一組類和界面組成,是管理大型名字空間,避免名字沖突的工具.
Java提供了很多包供我們使用,主要如下:

java.applet
設計Applet的類

java.awt
窗口工具包,包含了產生GUI元素的類

java.io
文件輸入輸出類

java.lang
java語言類,包含:對象,線程,異常出口,系統,整數,原點,數字,字符等

java.NET
Socket類及與TCP/IP相關的類

java.util
一些程序的同步類

感謝各位的閱讀,以上就是“Java中多線程怎么實現”的內容了,經過本文的學習后,相信大家對Java中多線程怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女