1. 程式人生 > >執行緒模型

執行緒模型

執行緒模型

什麼是程式

  安裝在磁碟上的一段指令集合,它是靜態的概念

什麼是程序

   它是執行中的程式,是動態的概念,每個程序有獨立的 資源空間

什麼是執行緒

  輕量級程序,是程式執行流的最小單元,是程式中一個單一的順序.執行緒是程序中 的一個實體,是被系統獨立排程和分派的基本單位

什麼是多執行緒

  則指的是在單個程式中可以同時執行多個不同的 執行緒執行不同的任務

 

多執行緒的特點

  一個程序可以包含一個或多個執行緒

  一個程式實現多個程式碼同時交替執行就需要產生多個執行緒

  執行緒本身不擁有系統資源,與同屬一個程序的其他執行緒共享所在程序所擁有的資源

  同一程序中的多個執行緒之間可以併發執行.cpu會隨機抽出時間,讓我們的程式一會做這件事情,一會做另一件事情

多執行緒的目的

  最大限度的利用cpu資源

//THread和Runnable介面的區別

Runnable介面的好處
//1.避免單繼承的侷限
//2.適合資源的共享

通過繼承Thread類建立執行緒

 

package com.iotek.day2;

public class ThreadDemo {
  public static void main(String[] args) {
    HelloThread h1=new HelloThread("A");
    
//設定執行緒名稱 h1.setName("執行緒1"); h1.start(); HelloThread h2=new HelloThread("B"); //設定執行緒名稱 h2.setName("執行緒2"); h2.start(); } } class HelloThread extends Thread{ public HelloThread(String name) { super(name); } @Override
public void run() { for(int i=0;i<5;i++) { System.out.println(this.getName()+" "+i); } } }

通過實現Runable介面建立執行緒

  建立實現Runable介面的類的例項

  建立一個Thread類物件,將第一步例項化得到的Runnable物件作為引數傳人Thread類的構造方法

 

package com.iotek.day2;

public class HelloRunnableDemo {
  public static void main(String[] args) {
    HelloRunnable h1=new HelloRunnable();
    //設定執行緒名字
    Thread t1=new Thread(h1,"A");
    t1.start();
    //設定執行緒名字
    Thread t2=new Thread(h1,"B");
    t2.start();
}
}


class HelloRunnable implements Runnable{
    
    
    
    @Override
    public void run() {
        for(int i=0;i<5;i++) {
            //根據Thread.currentThread().getName()得到執行緒名
            System.out.println(Thread.currentThread().getName()+i);
        }
        
    }
    
}

 

 Runnable介面的好處
//1.避免單繼承的侷限
//2.適合資源的共享

package com.iotek.day2;

public class StudentThreadDemo {
    public static void main(String[] args) {
        /*TicketThread t1 = new TicketThread("A視窗");
        t1.start();
        TicketThread t2 = new TicketThread("B視窗");
        t2.start();*/
        TicketRunnable r1=new TicketRunnable();
        Thread t1=new Thread(r1,"A視窗");
        t1.start();
        Thread t2=new Thread(r1,"B視窗");
        t2.start();
    }
}

/*
 * class TicketThread extends Thread{ private int ticket=5; public
 * TicketThread(String name) { super(name); }
 * 
 * @Override public void run() { while (true) {
 * 
 * System.out.println(this.getName()+" "+(ticket--)); if (ticket<1) { break; } }
 * } }
 */

class TicketRunnable  implements Runnable {
    private int ticket=5;
    @Override
    public void run() {
        while (true) {

            System.out.println(Thread.currentThread().getName() + " " + (ticket--));
            if (ticket < 1) {
                break;
            }
        }

    }

}