中断阻塞睡眠interrupt的使用

关于interrupt的使用挺简单的,一则代码就知道了。


package Day03;
/**
 * 中断睡眠阻塞
 * @author Administrator
 *
 */
public class InterruptSleepBlockDemo {
	public static void main(String[] args) {
		/*
		 * lin,处于睡眠阻塞的线程
		 */
		 final Thread lin = new Thread(new Runnable(){
			public void run() {
				System.out.println("lin:hahahaha");
				try {
					Thread.sleep(100000);
				} catch (InterruptedException e) {
					System.out.println("lin:what are you fucking doing?");
				}
			}
		});
		
		/*
		 * huang,用于中断lin的睡眠阻塞
		 */
		Thread huang = new Thread(new Runnable(){
			public void run() {
				System.out.println("开始砸!");
				for (int i = 0; i < 5; i++) {
					System.out.println("80!");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}
				System.out.println("BOW!!");
				System.out.println("huang:OK!");
				//终端lin的线程,打断其睡眠阻塞
				/*
				 * 一个方法的局部内部类中若要引用该方法的其他局部变量,那么这个变量必须是final的
				 */
				lin.interrupt();
			}
		});
		
		lin.start();
		huang.start();
	}
}

运行结果:



上面的例子其实可以用wait和notify来实现同样的效果:

package Day03;
/**
 * 中断睡眠阻塞
 * @author Administrator
 *
 */
public class WaitAndNotifySleepBlockDemo {
	public static void main(String[] args) {
		
		final Thread huang = new Thread(new Runnable(){
			public void run() {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
				System.out.println("开始砸!");
				for (int i = 0; i < 5; i++) {
					System.out.println("80!");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}
				System.out.println("BOW!!");
				System.out.println("huang:OK!");

				synchronized (this) {
					this.notify();
				}
			}
		});

		 Thread lin = new Thread(new Runnable(){
			public void run() {
				System.out.println("lin:hahahaha");
				synchronized (huang) {
					try {
						huang.wait();//将lin阻塞在huang的线程上,此时此线程阻塞等待唤醒
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println("lin:what are you fucking doing?");
			}
		});
		
		
		lin.start();
		huang.start();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
interrupt()方法可以用来中断一个正在运行的线程。当调用interrupt()方法时,它会将线程的中断标志位设为true。在某些情况下,中断标志位的改变会导致线程退出或发生其他行为。具体而言,interrupt()方法可以在以下几个情况下起作用: 1. 如果线程正在等待或睡眠,调用interrupt()方法会立即抛出InterruptedException异常,从而提前结束等待或睡眠状态。 2. 如果线程正在执行一个可中断阻塞方法,例如wait()、sleep()、join()等,调用interrupt()方法会使线程抛出InterruptedException异常,并结束阻塞状态。 3. 如果线程没有在等待、睡眠阻塞状态下,调用interrupt()方法会将中断标志位设为true。但是,线程需要自行检查中断标志位并做出相应的处理,例如退出循环或释放资源。 需要注意的是,interrupt()方法并不能直接终止一个线程,它仅仅是修改了中断标志位。线程需要根据具体的业务需求,在适当的时候检查中断标志位并采取相应的操作。 引用中的示例代码展示了使用interrupt()方法来中断线程的情况。在MyRunnable的run()方法中,通过检查中断标志位来控制线程的执行逻辑。当调用interrupt()方法后,线程会退出循环并正常结束。 引用中的示例代码展示了使用isInterrupted()方法来检查中断标志位的情况。在MyRunnable的run()方法中,通过检查isInterrupted()方法的返回值来决定是否退出循环。这种方式可以选择性地处理中断。 综上所述,interrupt()方法可以用来中断一个正在运行的线程,但线程需要根据具体的情况自行检查中断标志位并做出相应的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java中的interrupt()中断线程(Interrupt 方法结束线程)-- 转载](https://blog.csdn.net/l1996729/article/details/119738227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值