JAVA多线程笔记--volatile

        在java多线程的使用中,如果通过共享变量实现java的中断或者有共享变量,要通过关键字volatile 修饰。

        在java虚拟机中,共享变量保存在主存中,但是线程在访问变量的时候一般是访问主存变量的副本,于是,当我们要停止某个线程的时候,通过改变共享变量可以实现。

        但是为什么要使用volatile关键字修饰?用一般变量修饰行不行?答案也是可以的,因为现在的计算机运行速度很快,一般看不出差异很大,但是有些计算机不使用volatile修饰,会出现问题。

        在修改变量1时,如果使用的是一般变量1,而修改的是某个线程的变量1副本,而其他线程的副本还是属于原来的值,想要修改主存和其他线程的副本需要一段时间,但是在一般的计算机看不出来差别。

        如果想要直接修改主存的变量1,可以通过关键字volatile快速实现,然后其他线程的副本也会快速修改。

 

package JavaFile;
public class Test {
    public static void main(String [] args) throws InterruptedException{
        System.out.println("main start!");
        Thread1 the = new Thread1();
        the.start();
        Thread.sleep(1000);
        System.out.println("main end!");
        the.running = false;
    }
}

class Thread1 extends Thread{
    public volatile boolean running = true;
    public void run(){
        System.out.println("Thread1 start!");
        int counter=0;
        while(running){ //当running 为false时结束进程
            try {
                Thread.sleep(100);
            } catch (Exception e) {}
            counter++;
            System.out.println(counter+"Thread");
        }
        System.out.println("Thread1 end!");
    }
}

运行结果如下:

main start!
Thread1 start!
1Thread
2Thread
3Thread
4Thread
5Thread
6Thread
7Thread
8Thread
9Thread
main end!
10Thread
Thread1 end!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值