import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.LockSupport; public class main{ public static int readerid=0; public static int zoshu=0; public static int writerid=0; public boolean metex1=true; public boolean metex2=true; public static LinkedList<Thread> list=new LinkedList<>(); public static void main(String[] args){ System.out.println("请输入读者或者写者或者读者加数字或写者加数字"); while (true){ Scanner scanner=new Scanner( System.in ); String s=scanner.nextLine(); if(s.equals( "读者" )){ readerid++; zoshu++; if(readerid<=10){ Thread thread=new Thread( new readthread( readerid ),"读者"+zoshu ); list.add( thread ); thread.start(); } else System.out.println("读者人数已满"); } else if(s.equals( "写者" )){ writerid++; zoshu++; Thread threadw=new Thread( new writethread(),"写者"+zoshu ); list.add( threadw ); threadw.start(); } else { main main=new main(); main.stopthread( list,s,readerid,writerid,zoshu); } } } public void stopthread(LinkedList<Thread> list,String s,int readerid,int writerid,int zoshu){ if(!list.isEmpty()){ for(Thread thread1 : list){ if(thread1.getName()==s){ LockSupport.unpark(thread1); if(thread1.getName().substring( 0,1 )=="读者"){ System.out.println( thread1.getName()+"离开" ); readerid--; zoshu--; } if(thread1.getName().substring( 0,1 )=="写者"){ System.out.println( thread1.getName()+"离开" ); writerid--; zoshu--; } if(readerid==0){ metex2=true; } if(writerid==0){ metex1=true; } } } } else System.out.println("当前不存在用户"); } }
import java.util.concurrent.locks.LockSupport; public class readthread extends main implements Runnable{ private int id; public readthread(){} public readthread(int i){ id=i; } public int getId(){ return id; } @Override public void run(){ if(metex1){ System.out.println(this.id+"号读者开始阅读"); metex2=false; LockSupport.park(); System.out.println("线程被唤醒"); } else{ System.out.println( "作者正在修改,请过会在尝试" ); readerid--; } } }
import java.util.concurrent.locks.LockSupport; public class writethread extends main implements Runnable{ @Override public void run(){ if (metex2){ System.out.println("正在写作,请稍后再来阅读"); metex1=false; LockSupport.park(); } else System.out.println("有读者正在阅读"); writerid--; } }
还有一个else可以判断
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
你要求的是:
请输入读者或者写者或者读者加数字或写者加数字
但是你在
我执行是正常的。
但是你的代码写的判断条件却是:
if(s.equals( "读者" )){
if(s.equals( "写者" )){
这有问题把。