【Java學習筆記】多線程

  • 進程與線程的概念
  • Java中線程的基本操作
  • Java開發多線程應用

進程與線程

進程
- 程序(任務)的執行過程 (動態性)
- 持有資源(共享內存,共享文件)和線程

線程
- 是系統中最小的執行單元
- 用一個進程中有多個線程
- 線程共享進程的資源

線程的交互
(多個線程需要相互通信才能正常的工作)
- 同步:需要線程之間相互的協作完成某些任務
- 互斥:資源有限,需要搶佔和競爭

Java中線程的常用方法介紹

1. Java語言對線程的支持

這裏寫圖片描述

  • class Thread
  • interface Runnable
    • public void run()

public void run()提供了線程實際工作的代碼

2. Tread常用方法

這裏寫圖片描述

public class Actor extends Thread {

    public void run() {
        System.out.println(getName()+"是一個演員!");
        int count = 0;
        boolean keepruning = true;

        while (keepruning) {
            System.out.println(getName()+"登臺演出:"+(++count));
            if(count == 100) {
                keepruning = false;
            }

            if(count%10 == 0) {
                try {
                    Thread.sleep(1000);//1s
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   
            }
        }   
        System.out.println(getName()+"演出結束");   
    }

    public static void main(String[] args) {
        Thread actor = new Actor();
        actor.setName("Mr. Thread");
        actor.start();

        Thread actressThread = new Thread(new Actress(),"Ms. Runnable");
        actressThread.start();

        }
}

class Actress implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"演出開始了");
        int count = 0;
        boolean boo = true;

        while (boo) {
            System.out.println(Thread.currentThread().getName()+"登臺演出:"+(++count));
            if(count == 100) {
                boo = false;
            }
            if(count%10 == 0) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }           
        }       
        System.out.println(Thread.currentThread().getName()+"演出結束了");
    }
}

線程的正確停止

如何正確的停止Java中的線程

  • 通常不使用shop()方法,會使線程戛然而止,對數據處理等不利
  • 通常也不使用interrupt()方法,interrupt()方法初衷並不是用於停止線程
  • 通常使用退出標誌

    volatile boolean keepRunning = true;
    
    @Override
    public void run() {
    
        while(keepRunning) {
            //發動5連擊
            for(int i = 0;i < 5;i++) {
                System.out.println(Thread.currentThread().getName()+"進行攻擊"+"["+i+"]"+"次!");
                //讓出了處理時間,下次讓誰進攻還不一定呢!
                Thread.yield();
            }
        }   
        System.out.println(Thread.currentThread().getName()+"結束戰鬥!");
    }

線程的交互

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章