3
回答
java如何终止正在等待synchronized锁的线程
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

	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
发帖于9个月前 3回/276阅
顶部