Java線程基礎(一)

 說在前面,通過一段學習事後,本身發覺線程在Java中佔有舉足輕重的地位,總以爲如此複雜的線程知識點必定要好好理清纔好消化,於是有了這篇文章。java

但因鄙人資歷尚淺,若有遺漏錯誤之處還請廣大網友不吝賜教。編程

——————————————————————————我是分割線———————————————————————————————————————瀏覽器

  首先讓咱們來梳理一下知識點,理清好脈絡纔好作題!多線程

 

1、線程基本概念

  咱們先來了解一下什麼是線程。併發

  要解釋線程,就必須明白什麼是進程,那什麼是進程呢?若是學過操做系統的同窗應該知道:ide

    進程是指運行中的應用程序,每一個進程都有本身獨立的地址空間(內存空間),好比用戶點擊桌面的IE瀏覽器,就啓動了一個進程,操做系統就會爲該進程分配獨立的地址空間。當用戶再次點擊左面的IE瀏覽器,又啓動了一個進程,操做系統將爲新的進程分配新的獨立的地址空間。目前操做系統都支持多進程。學習

  要點:用戶每啓動一個進程,操做系統就會爲該進程分配一個獨立的內存空間。請注意是獨立的內存空間。this

    在明白進程後,就比較容易理解線程的概念。spa

    線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程本身不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。一個線程能夠建立和撤消另外一個線程,同一進程中的多個線程之間能夠併發執行。線程有就緒、阻塞和運行三種基本狀態。操作系統

 

線程的特色:

一、線程是輕量級的進程

二、線程沒有獨立的地址空間(內存空間)

三、線程是由進程建立的(寄生在進程)

四、一個進程能夠擁有多個線程-->這就是咱們常說的多線程編程

五、線程有幾種狀態:

  a、新建狀態(new)

  b、就緒狀態(Runnable)

  c、運行狀態(Running)

  d、阻塞狀態(Blocked)

  e、死亡狀態(Dead)

Just like this!

BINGO!

  剛纔咱們講到了線程的四大特色,其中最後一條是說一個進程中能夠包含多條線程,咱們稱這樣的線程叫多線程。

那麼問題來了,

 

什麼是多線程呢?

  若是在一個進程中同時運行了多個線程,用來完成不一樣的工做,則稱之爲「多線程」。
其中最值得咱們注意的是:多個線程其實是交替佔用CPU資源,而非咱們表面看起來的並行執行。

 

多線程的好處

  •   充分利用CPU的資源
  •   簡化編程模型
  •        帶來良好的用戶體驗

好了,瞭解了基本知識點以後咱們來介紹介紹Java中有關線程建立經常使用到的類

 

線程的建立

首當其衝的要說的即是咱們的Thread類

  Java提供了java.lang.Thread類支持多線程編程

這是一種最簡單的建立線程的方法,值得注意的是這裏的類是繼承了Thread父類的。

public class ThreadDemo extends Thread{
	@Override
	public void run() {
		for(int i=0;i<=20;i++){
			System.out.println(i+".你好,來自線程"+
		Thread.currentThread().getName());
		}
	}
	public static void main(String[]args){
	ThreadDemo t1=new ThreadDemo();
	t1.start();//線程的啓動方法
	ThreadDemo t2=new ThreadDemo();
	t2.start();
	}
}

  

  直接new明顯是一個簡單快捷的辦法,但有時候咱們爲了傳入某種參數或是爲了約束對象類型每每會在new ***()中加入咱們的參數或類型名稱,這些也是應當掌握的,在稍後面的代碼中會有關於這一現象的描述。

 

  除了使用直接繼承Thread類之外,咱們還能夠定義MyRunnable類實現Runnable接口,而後完成如下四步操做便可

    1. 實現run()方法;
    2. 編寫線程執行體;
    3. 建立線程對象;
    4. 調用start()方法啓動線程。
public class RunnableDemo implements Runnable {
	@Override
	public void run() {
		for(int i=0;i<=100;i++){
			System.out.println(Thread.currentThread().getName()+"-->"+i);
		}
	}
	public static void main(String[] args) {
		RunnableDemo rd1=new RunnableDemo();
		Thread t1=new Thread(rd1);
		t1.start();
		RunnableDemo rd2=new RunnableDemo();
		Thread t2=new Thread(rd2);
		t2.start();
	}
}

  看起來是否是比Thread類更復雜一點呢,其實也就是在new完RunnableDemo以後還要將這一新建對象放進Thread方法中。

那麼,這二者的區別又是什麼呢?

1、繼承Thread類
  編寫簡單,可直接操做線程
  適用於單繼承
2、實現Runnable接口
  避免單繼承侷限性
  便於共享資源

雖然建立了諸多線程,可是若是沒有主線程的運行仍然只是一條沒有夢想的鹹魚(笑)

 

主線程
  main()方法即爲主線程入口
  產生其餘子線程的線程
  必須最後完成執行,由於它執行各類關閉動做

 

 

 

好了,有了主線程的幫助,咱們的線程終於可以跑起來了,但會不會有其餘的異常出現,或者還有沒有其餘更復雜的線程實例,

因爲學習上的其餘事情,我決定下次有時間再寫,歡迎關注我,我將持續更新學習進度!作一個有夢想的鹹魚!

——————————————————未完待續——————————————————————————————————

相關文章
相關標籤/搜索