a1124544556 2021-04-22 01:37 采纳率: 0%
浏览 34

java ReentrantLock  Condition

目的是想用ReentrantLock  Condition 按数组  顺序输出;但好像一直锁等待,不明白为什么,麻烦大神解惑,感谢

private static ReentrantLock lock = new ReentrantLock();
	private static Condition c = lock.newCondition();
	private static Condition c2 = lock.newCondition();
	volatile static int m = 0;
	public static void main(String[] args) throws Exception {
		int[] arr = {1,2,3,4,5,6,7,8,9,0};
		
		for(int i = 0;i<arr.length;i++) {
			final int  n = arr[i];
			new Callable<String>() {
				
				@Override
				public String call() throws Exception {
					String rt = "";
					try {
						lock.lock();
						if(n != m) {
							System.out.println(m+"  wait");
							c.await();
							rt+="--wait--";
						}
						System.out.println(Thread.currentThread().getName()+"-------run-----"+n);
						
						c.signalAll();
						rt+="--ok";
						m++;
						return rt;
					} catch (InterruptedException e) {
						e.printStackTrace();
					}finally {
						lock.unlock();
					}
					return null;
				}
			}.call();
		}
	}
  • 写回答

6条回答 默认 最新

  • 关注

    建议写一些调试的打印语句,跟踪代码运行状态。

    评论

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗