标签:设计模式 模式 pattern java多线程 多线程模式
同时只允许一个线程使用资源。
多线程共享一个资源,仅允许获得了资源锁的线程对资源的访问,避免多线程访问资源造成冲突。
多线程争用资源,资源状态(这里的状态指资源对象的属性)可被占用线程变更,需要确保各个线程所见资源状态正确的场景。
抢椅子:幼儿园老师组织3个小朋友抢椅子,规则是一次只能有一个人占据椅子,椅子被占后,老师公布结果,当前占有的小朋友离开,重新开始抢占。
独占资源:椅子,老师。
线程:3个小朋友。
package SingleThreadedExecution; public class Teacher { public void chairHolded(String owner){ if(owner!=null){ System.out.println(owner+"抢到了椅子!"); } } public static void main(String[] args) { Teacher t=new Teacher(); IChair chair=new Chair(t);//单线程运行模式,抢椅子。 Child c1=new Child(chair,"c1"); Child c2=new Child(chair,"c2"); Child c3=new Child(chair,"c3"); Thread t1=new Thread(c1); Thread t2=new Thread(c2); Thread t3=new Thread(c3); t1.start(); t2.start(); t3.start(); } }
package SingleThreadedExecution; public class Child implements Runnable { private IChair chair=null; private String myName=null; private int cnt=0; public Child(IChair chair,String myName){ this.chair=chair; this.myName=myName; } @Override public void run() { while(true){ boolean isSuccess=chair.setOwner(this.myName); if(isSuccess){ cnt++; } try { Thread.sleep(1); } catch (InterruptedException e) { System.out.println("Interrupted!"); } } } }
package SingleThreadedExecution; public interface IChair { public boolean setOwner(String newOne); }
package SingleThreadedExecution; public class Chair implements IChair{ private Teacher observer=null; private String owner; public Chair(Teacher observer){ this.observer=observer; } public synchronized boolean setOwner(String newOne){ this.owner=newOne; observer.chairHolded(this.owner); return true; } }
本文出自 “JAVA技术栈笔记” 博客,请务必保留此出处http://stroll.blog.51cto.com/11038467/1855015
JAVA多线程(三)模式-Single Threaded Execution
标签:设计模式 模式 pattern java多线程 多线程模式
原文地址:http://stroll.blog.51cto.com/11038467/1855015