您的位置:首页 > 编程语言 > Java开发

JAVA多线程(三)模式-Single Threaded Execution

2016-09-21 16:03 453 查看


Single Threaded Executio

同时只允许一个线程使用资源。

多线程共享一个资源,仅允许获得了资源锁的线程对资源的访问,避免多线程访问资源造成冲突。


适用环境

多线程争用资源,资源状态(这里的状态指资源对象的属性)可被占用线程变更,需要确保各个线程所见资源状态正确的场景。


样例

抢椅子:幼儿园老师组织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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息