首页 > 代码库 > JAVA多线程(三)模式-Single Threaded Execution

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

  • 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;
      					}
      				}

本文出自 “JAVA技术栈笔记” 博客,请务必保留此出处http://stroll.blog.51cto.com/11038467/1855015

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