程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java多線程的完成方法比擬(兩種方法比擬)

Java多線程的完成方法比擬(兩種方法比擬)

編輯:關於JAVA

Java多線程的完成方法比擬(兩種方法比擬)。本站提示廣大學習愛好者:(Java多線程的完成方法比擬(兩種方法比擬))文章只能為提供參考,不一定能成為您想要的結果。以下是Java多線程的完成方法比擬(兩種方法比擬)正文


先看一下java線程運轉時各個階段的運轉狀況

線程是過程中的一個實體,是被體系自力調劑和分配的根本單元,線程本身不具有體系資本,只具有一點在運轉中必弗成少的資本,但它可與同屬一個過程的其它線程同享過程所具有的全體資本。一個線程可以創立和取消另外一個線程,統一過程中的多個線程之間可以並發履行。因為線程之間的互相制約,導致線程在運轉中出現出連續性。

在引入線程的操作體系中,平日都是把過程作為分派資本的根本單元,而把線程作為自力運轉和自力調劑的根本單元。因為線程比過程更小,根本上不具有體系資本,故對它的調劑所支付的開支就會小很多,能更高效的進步體系內多個法式間並發履行的水平,從而明顯進步體系資本的應用率和吞吐量。

線程是法式中一個單一的次序掌握流程。在單個法式中同時運轉多個線程完成分歧的任務,稱為多線程。

多線程重要是為了勤儉CPU時光,施展應用,線程的運轉中須要應用盤算機的內存資本和CPU。

多線程是為了同步完成多項義務,不是為了進步運轉效力,而是為了進步資本應用效力來進步體系的效力。線程是在統一時光須要完成多項義務的時刻完成的。

java完成多線程有兩種辦法

1、繼續Thread類

2、完成Runnable接口

這兩種辦法的配合點:

豈論用哪一種辦法,都必需用Thread(假如是Thead子類就用它自己)發生線程,然後再挪用start()辦法。

兩種辦法的分歧點:

1、繼續Thread類有一個缺陷就是單繼續,而完成Runnable接口則填補了它的缺陷,可以完成多繼續

2、繼續Thread類必需假如發生Runnable實例對象,就必需發生多個Runnable實例對象,然後再用Thread發生多個線程;而完成Runnable接口,只須要樹立一個完成這個類的實例,然後用這一個實例對象發生多個線程。即完成了資本的同享性

基於以上兩點所以建議用第二種辦法

上面用例子來做解釋

法式1:

package com.dr.runnable1;
//一個類只需繼續了Thread類,則此類就是多線程類
class MyThread extends Thread
{
 private String name;
 public MyThread(String name)
 {
  this.name=name;
 }
 //假如要應用多線程,則必需有一個辦法的主體
 public void run()
 {
  //打印輸入
  for(int i=0;i<10;i++)
  {
   System.out.println(this.name+"----->運轉、、、、");
  }
 }
}
public class Demo1 {
 public static void main(String args[])
 {
//第一種辦法
   Runnable r1=new MyThread("線程A");
  Runnable r2=new MyThread("線程B");
  Runnable r3=new MyThread("線程C");
  Thread t1=new Thread(r1);
  Thread t2=new Thread(r2);
  Thread t3=new Thread(r3);
  t1.start();
  t2.start();
  t3.start();
 //  mt1.run();//線程履行,應用start辦法
//  mt2.run();
//  mt3.run();
//第二種辦法
//  MyThread mt1=new MyThread("線程A");
//  MyThread mt2=new MyThread("線程B");
//  MyThread mt3=new MyThread("線程C");
//  mt1.start();
//  mt1.start();//線程只能啟動一次
//  mt2.start();
//  mt3.start(); 
 } 
} 

法式的運轉成果是:

這是繼續了Thread類,第一種辦法發生多個Runnable實例對象,然後用Thread發生多個線程

第二種辦法,由於這個類曾經繼續了Thread類,所以便可以直接應用它自己發生多個線程

法式2:

package com.dr.runnable1;
class MyThread1 implements Runnable
{
 private int ticket=10;
 public void run()
 {
  for(int i=0;i<500;i++)
  {
   if(this.ticket>0)
   {
    System.out.println("賣票----->"+(this.ticket--));
   }
  }
 }
}
public class Demo2 {
 public static void main(String args[])
 {
   MyThread1 mt=new MyThread1();
  Thread t1=new Thread(mt);
  Thread t2=new Thread(mt);
  Thread t3=new Thread(mt);
  t1.start();
  t2.start();
  t3.start();
 } 
} 

法式運轉成果:

這個法式是完成Runnable了,發生一類的實例對象,然後用Thread發生多個線程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved