current thread is not owner问题
看了网上得相应的解释,我发现网上大部分说的是要把wait和notifyAll放到一个大括号里,但是我找了找,我的问题不是这个
因为这两个方法需要获得锁,而我锁的是
synchronized (list)
而我的wait方法只是用了wait方法,正确的使用应该是list.wait(),下面是整个的代码

import java.util.LinkedList; import static java.lang.Thread.sleep; public class Buffer { private final int MAX = 10; private LinkedList<Object> list = new LinkedList<>(); /** * @param value 生产产品的名字,是什么玩意 * @param time 生产者生产花费的时间 */ public void product(int value, int time){ synchronized (list){ while(list.size() == MAX){ System.out.println("仓库中已经放满"+MAX+"个仓品,达到上限,无法继续放入"); try { list.wait(); } catch (Exception e) { e.printStackTrace(); } } list.add(value); // try { // sleep(time*1000); // } catch (Exception e) { // e.printStackTrace(); // } // finally { // System.out.println("生产者生产花费了"+time+"秒"); // } System.out.println("生产者为:"+Thread.currentThread().getName()+"当前仓库容量为"+list.size()); System.out.println("-------------------------------"); list.notifyAll(); } } /** * 相应的对应上面的生产者,基本代码没有任何区别 * @param time */ public void consumer(int time){ synchronized (list){ while(list.size() == 0){ System.out.println("仓库中已空,请等待生产者生产"); try { list.wait(); } catch (Exception e) { e.printStackTrace(); } } list.remove(); // try { // sleep(time*1000); // } catch (Exception e) { // e.printStackTrace(); // } // finally { // System.out.println("消费者消费花费了"+time+"秒"); // } System.out.println("消费者为:"+Thread.currentThread().getName()+"当前仓库容量为"+list.size()); System.out.println("-------------------------------"); list.notifyAll(); } } }

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器