執行緒模型
阿新 • • 發佈:2018-11-22
執行緒模型
什麼是程式
安裝在磁碟上的一段指令集合,它是靜態的概念
什麼是程序
它是執行中的程式,是動態的概念,每個程序有獨立的 資源空間
什麼是執行緒
輕量級程序,是程式執行流的最小單元,是程式中一個單一的順序.執行緒是程序中 的一個實體,是被系統獨立排程和分派的基本單位
什麼是多執行緒
則指的是在單個程式中可以同時執行多個不同的 執行緒執行不同的任務
多執行緒的特點
一個程序可以包含一個或多個執行緒
一個程式實現多個程式碼同時交替執行就需要產生多個執行緒
執行緒本身不擁有系統資源,與同屬一個程序的其他執行緒共享所在程序所擁有的資源
同一程序中的多個執行緒之間可以併發執行.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); } @Overridepublic 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; } } } }