3
回答
java如何终止正在等待synchronized锁的线程
华为云4核8G,高性能云服务器,免费试用   

	public static void main(String[] args) throws InterruptedException, IOException {

		final Object synchronizedo = new Object();
		
                //先启动的线程
		new Thread(new Runnable() {

			@Override
			public void run() {
				synchronized (synchronizedo) {	//先启动的线程,占有synchronizedo
                                        //通过sleep模拟耗时较长的任务
					try {
						TimeUnit.SECONDS.sleep(Long.MAX_VALUE);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		
                //确保上面的线程先运行
		TimeUnit.SECONDS.sleep(2L);

		final Thread t1 = new Thread(new Runnable() {

			@Override
			public void run() {
				Thread.currentThread().setName("t1");

				//线程执行到这里就阻塞了,并且该线程无法被终止	
				synchronized (synchronizedo) {
				}
			}
		});
		t1.start();
		

		TimeUnit.SECONDS.sleep(2L);
		
		t1.interrupt();
		t1.stop();
		
		TimeUnit.SECONDS.sleep(2L);
		
		System.out.println(t1.getState());


		TimeUnit.SECONDS.sleep(Long.MAX_VALUE);	//使main线程不会退出
	}

 

这段代码会输出"BLOCKED", 可见无论是interrupt还是stop都无法结束t1线程 现在的问题是,在t1没有获取synchronizedo对象锁的情况下,该如何结束t1线程? @国栋

<无标签>
举报
limchuenyu
发帖于1年前 3回/286阅
顶部