兩種方式實現多執行緒共享資源(典型的售票例子)
阿新 • • 發佈:2018-12-29
1、繼承Thread
TestThread類
public class TestThread extends Thread{ private int ticket = 300; @Override public void run() { while(true){ try { Thread.sleep(10); } catch (Exception e) { e.printStackTrace(); } sale(); if(ticket <= 0) break; } } public synchronized void sale(){ if(ticket > 0){ System.out.println(Thread.currentThread().getName() +"-->"+ ticket--); } } }
2、Runable介面
TestRunable類
package mytestthread; public class TestRunable implements Runnable{ public int tic = 300; @Override public void run() { while(true){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } sale(); if(tic <= 0) break; } } public synchronized void sale(){ if(tic > 0){ System.out.println(Thread.currentThread().getName() + "--" + tic--); } } }
3、main函式
package mytestthread; public class MyThead{ /** * @param args */ public static void main(String[] args) { /*TestRunable t1 = new TestRunable(); Thread thread1 = new Thread(t1, "te1"); Thread thread2 = new Thread(t1, "te2"); Thread thread3 = new Thread(t1, "te3"); Thread thread4 = new Thread(t1, "te4"); thread1.start(); thread2.start(); thread3.start(); thread4.start();*/ TestThread t = new TestThread(); Thread aa =new Thread(t,"aa"); Thread bb =new Thread(t,"bb"); Thread cc =new Thread(t,"cc"); aa.start(); bb.start(); cc.start(); } }
看了幾篇文章感覺沒達到資源共享的目的,資源共享需要synchronized鎖,並且需要同一個物件才有效。