断点调式Locksupport.park方法不能进入,unpark方法不能唤醒线程,且不能执行成功

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( "写者" )){

 

这有问题把。