Java多线程基础(5):volatile关键字应用

我曾经在工作中写过一个多线程的程序,它需要把while循环放到多线程里不断地执行,但是这样线程就不会停止了,一开始我想过在某个时刻调用interrupt()方法停掉线程,但是这样其实是不好的,当时有个同事和我说可以设计一个boolean型开关,当想让该循环的多线程运行时就把它设为true,想跳出循环时便设为false,可优雅的关闭和开启所有的多线程,就用到了volatile关键字,这里记录下它的应用。
volatile关键字在多线程里的应用是当我们将一个变量声明为volatile时,只要对这个变量产生了写操作,那么所有的读操作就都可以看到这个的修改,有点静态的意思在里面,但是这仅局限于同一个Runnable对象内,当创建多个Runnable对象时,便不适用。
通过volatile关键字控制多线程循环的跳出:

public class VolatileRunnable implements Runnable{
	
	private volatile boolean flag=true;
	private String name;
	public VolatileRunnable(String name) {
		this.name=name;
	}
	
	public void setFlag(boolean flag) {
		this.flag=flag;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(flag) {
			System.out.println(name);
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("线程:"+name+"终止!!!!!!!!!!!!!");
	
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		VolatileRunnable vr=new VolatileRunnable("kobe");
		new Thread(vr).start();
		new Thread(vr).start();
		new Thread(vr).start();
		
		try {
			Thread.sleep(5000);
			vr.setFlag(false);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

输出:
kobe
kobe
kobe
kobe
kobe
kobe
kobe
线程:kobe终止!!!!!!!!!!!!!
线程:kobe终止!!!!!!!!!!!!!
线程:kobe终止!!!!!!!!!!!!!

同一个Runnable对象,开启三个线程执行循环,只需把flag这个开关置为false,三个多线程便都会停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值