多线程描述两个村庄共用一口井

井水初始值为10升

村庄1每次喝一升

村庄2每次喝二升

两个村庄喝完水都会休息一秒

怎么做?

 

 

package T13;

/**
 * 喝水
 * 
 * */
public class Ticket implements Runnable {

	//水数量
	int ticketCount=10;
	@Override
	public void run() {
		saleTicket();
	}
	//喝水
	public void saleTicket(){
		//临界点,要用互斥锁实现同步
		/**
		 * 1.函数级的同步:synchronized
		 * 2.语句块的同步:synchronized
		 * */
		try{
			while(true){
				//需要锁,锁就是一个Object类型的变量
				synchronized (this) {//临界点
					if(ticketCount<1)
						break;
					String name = Thread.currentThread().getName();
                    if(name.equlas("村庄1"){
					    ticketCount = ticketCount-1;
                        System.out.println(name+"喝了1升水,还剩"+ticketCount+"升水");
                    }else if(name.equals("村庄2"){
                        ticketCount = ticketCount-2;
                        System.out.println(name+"喝了2升水,还剩"+ticketCount+"升水");
                    }
					
					Thread.sleep(1000);
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket,"村庄1").start();
		new Thread(ticket,"村庄2").start();
		
	}
}

静态共享变量,设置锁,线程休眠

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632