php多线程 static变量,静态变量,可见性_java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?,静态变量,可见性,java多线程,java - phpStudy...

本文探讨了在Java多线程环境中,如何通过静态成员变量实现线程间的通信。作者遇到的问题是,当使用非静态变量时,线程A无法正确感知线程B对变量的修改;而将变量改为静态并放置在主类中后,线程间的通信得以正常。问题的关键在于静态变量对于所有实例都是共享的,因此线程B的修改可以被线程A感知到。这个例子展示了Java中线程同步的基本概念和volatile关键字的作用。
摘要由CSDN通过智能技术生成

java多线程,不同runnable之间可以在运行时改变对方的静态成员变量吗?

我想在主线程里启用两个线程,这两个线程采用两个不同实现的Runnable对象,记作A和B。

我的意图是当采用B的线程运行完成后通知A线程,首先我尝试了如下设计:

class Run {

public static void main(String[] args) {

new Thread(new A()).start();

new Thread(new B()).start();

}

}

class A implements Runnable {

public static volatile boolean isStop = false; // 标记B是否完成运行

public void run() {

while(**! isStop**) { //B结束后A跳出循环

do sth;

}

System.out.println("B has stopped.")

}

}

class B implements Runnable {

public void run() {

do sth;

**A.isStop = true**; // 准备退出,将A中的标志变量改为true

}

}

然而之后在启动这两个线程后,B结束后A仍在循环,即A读到的isStop依然为false.

之后我尝试将isStop变量改到main方法所在类中,大体设计如下:

class Run {

public static volatile boolean isStop = false; // 标记B是否完成运行

public static void main(String[] args) {

new Thread(new A()).start();

new Thread(new B()).start();

}

}

class A implements Runnable {

public void run() {

while(**! Run.isSto**p) { //B结束后A跳出循环

do sth;

}

System.out.println("B has stopped.")

}

}

class B implements Runnable {

public void run() {

do sth;

**Run.isStop = true;** // 准备退出,将Run中的标志变量改为true

}

}

这样可以正常完成通知过程。但我不明白为什么会是这个结果?原理上跟先前的尝试有何不同?

提前谢过大家!

相关阅读:

elementUi 能基于全局的Vue对象使用它的组件吗?

几个关于jsp的问题

通不过HTTPS怎么破?

angular1 directive 如何操作dom实现后台管理系统的折叠导航?

object.__setattr__和直接设置属性有什么不同吗?

jquery click获取该条json数据

atom有什么插件可以提示es6 import进当前文件却没被使用到的

两个js function 互相调用引发的其中一个未定义的问题。

为什么在函数中用createElement创建的元素,函数结束后不能访问,为null,而在下一个函数中却能访问?

skrollr.js的p是什么意思

移动端简单的picker demo,ios和android chrome兼容,android微信里不兼容

为什么刷新页面会导致表单重复提交呀,

如何用vim实现快速整理编号

iOS 开发单元测试,大家开发过程中常用吗,网上资料看了不少,但还是没明白怎么使用,怎么实战呢?

查询某张表的全部数据,这两种方式有区别吗?

wordpress 文章评论实现 ajax 的方法

@RequestParam 获取参数值有问题

在js或css文件后面加上"_日期"起到什么作用呢?

求java md5工具类和php md5工具类通用版

关于bootstrap导航栏下的巨幕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值