国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java線程

2019-11-06 06:37:23
字體:
來源:轉載
供稿:網友

1、繼承Thread創建線程

public class ThreadDemo {	public static void main(String[] args) {		ThreadTest1 st1=new ThreadTest1("張三");		ThreadTest1 st2=new ThreadTest1("李四");		//調用start方法開啟線程 		st1.start();		st2.start();		System.out.PRintln(" main over...."+Thread.currentThread().getName());	}}class ThreadTest1 extends Thread{	String name;	public ThreadTest1(String name) {		this.name=name;	}	//run方法定義線程要運行的任務代碼	public void run(){		for (int i = 0; i < 10; i++) {			System.out.println(i+"......"+name+"....."+Thread.currentThread().getName());		}	}}

線程的狀態:

sleep:到時間自動回到運行狀態

wait:不調用線程的notify方法則一直處于凍結狀態,凍結狀態是指任務被移出CPU任務處理隊列

2、繼承Runnable接口創建線程

//繼承Runnable接口創建線程public class RunnableDemo {public static void main(String[] args) {	RunnableTest test=new RunnableTest();        //將Runnable接口的實現類作為參數傳遞給Thread的構造方法,用以明確線程的任務       Thread t1=new Thread(test);	Thread t2=new Thread(test);	t1.start();	t2.start();}}class RunnableTest implements Runnable{	@Override	public void run() {		show();	}	public void show(){		for (int i = 0; i < 10; i++) {			System.out.println(i+"...."+Thread.currentThread().getName());		}	}}賣票問題:

同步代碼塊:

//賣票問題//線程安全問題產生的原因:多個線程在操作共享數據,且操作共享數據的線程代碼有多條,當一個線程操作多條共享代碼的過程中,其他進程參與了運算,//就產生了線程安全問題//利用同步代碼塊可以解決線程安全問題synchronized//同步的前提是多線程必須持有同一個鎖public class SaleTicket {    public static void main(String[] args) {        SaleTicketDemo saleTicketDemo=new SaleTicketDemo();        //四個線程執行同一個任務        Thread t1=new Thread(saleTicketDemo);        Thread t2=new Thread(saleTicketDemo);        Thread t3=new Thread(saleTicketDemo);        Thread t4=new Thread(saleTicketDemo);        t1.start();        t2.start();        t3.start();        t4.start();    }}class SaleTicketDemo implements Runnable{    private int num=100;    Object obj=new Object();//同步鎖對象必須放在run方法以外    @Override    public void run() {        while(true){            synchronized (obj) {                if(num>0){                    try {                        Thread.sleep(10);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread().getName()+"....."+num--);                }            }        }    }    }}

同步函數:

public class SaleTicket {	public static void main(String[] args) {		SaleTicketDemo saleTicketDemo=new SaleTicketDemo();		//四個線程執行同一個任務		Thread t1=new Thread(saleTicketDemo);		Thread t2=new Thread(saleTicketDemo);		Thread t3=new Thread(saleTicketDemo);		Thread t4=new Thread(saleTicketDemo);		t1.start();		t2.start();		t3.start();		t4.start();	}}class SaleTicketDemo implements Runnable{	private int num=100;	Object obj=new Object();//同步鎖對象必須放在run方法以外	@Override	public void run() {		while(true){			show();		}	}	//同步函數,同步函數的鎖是this	public synchronized void show(){		if(num>0){			try {				Thread.sleep(10);			} catch (InterruptedException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			System.out.println(Thread.currentThread().getName()+"....."+num--);		}	}	}

線程之間的通信:

package Thread;/* * 當線程執行wait()時,會把當前的鎖釋放,然后讓出CPU,進入等待狀態。 * 當執行notify/notifyAll方法時,會喚醒一個處于等待該 對象鎖 的線程,然后繼續往下執行,直到執行完退出對象鎖鎖住的區域(synchronized修飾的代碼塊)后再釋放鎖。 *  * */class Resource{	String name;	String sex;	//資源中是否含有數據,false為不含數據	boolean flag=false;}class Input implements Runnable{	Resource r;		public Input(Resource r) {		this.r = r;	}	@Override	public void run() {		int x=0;		while(true){			synchronized (r) {				if(r.flag){					try {						r.wait();					} catch (InterruptedException e) {						e.printStackTrace();					}				}else{					if(x==0){						r.name="張三";						r.sex="男";					}else{						r.name="李四";						r.sex="女";					}					r.flag=true;					r.notify();					x=(x+1)%2;				}			}		}	}	}class Output implements Runnable{	Resource r;	public Output(Resource r) {		this.r = r;	}	@Override	public void run() {		while(true){			synchronized (r) {				if(!r.flag){					try {						r.wait();					} catch (InterruptedException e) {						e.printStackTrace();					}				}else{										System.out.println(r.name+"....."+r.sex);					r.flag=false;					r.notify();				}			}		}	}	}public class ThreadTalk {	public static void main(String[] args) {		Resource resource=new Resource();		Input input=new Input(resource);		Output output=new Output(resource);		Thread t1=new Thread(input);		Thread t2=new Thread(output);		t1.start();		t2.start();	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 象州县| 江都市| 三都| 四子王旗| 策勒县| 如东县| 浑源县| 贺州市| 芦山县| 平阳县| 肇州县| 商丘市| 陈巴尔虎旗| 东乡族自治县| 中山市| 禹城市| 沂源县| 资阳市| 福安市| 定边县| 怀宁县| 巢湖市| 永川市| 鹤壁市| 阿克陶县| 九寨沟县| 洛浦县| 北海市| 克拉玛依市| 南宫市| 巴彦淖尔市| 鄂尔多斯市| 龙川县| 南澳县| 漯河市| 青海省| 屯留县| 阿拉善左旗| 凤山市| 尼勒克县| 绥棱县|