作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我在主线程中声明了一个全局变量,假设我从主线程运行一个新线程,新线程是否可以访问主线程中的全局变量?
“msg”字符串是我要访问的变量
/* A simple banner applet.
This applet creates a thread that scrolls
the message contained in msg right to left
across the applet's window.
*/
import java.awt.*;
import java.applet.*;
/*
<applet code="SimpleBanner" width=300 height=50>
</applet>
*/
public class AppletSkel extends Applet implements Runnable {
String msg = " A Simple Moving Banner."; //<<-----------------VARIABLE TO ACCESS
Thread t = null;
int state;
boolean stopFlag;
// Set colors and initialize thread.
public void init() {
setBackground(Color.cyan);
setForeground(Color.red);
}
// Start thread
public void start() {
t = new Thread(this);
stopFlag = false;
t.start();
}
// Entry point for the thread that runs the banner.
public void run() {
char ch;
// Display banner
for( ; ; ) {
try {
repaint();
Thread.sleep(250);
ch = msg.charAt(0);
msg = msg.substring(1, msg.length());
msg += ch;
if(stopFlag)
break;
} catch(InterruptedException e) {}
}
}
// Pause the banner.
public void stop() {
stopFlag = true;
t = null;
}
// Display the banner.
public void paint(Graphics g) {
g.drawString(msg, 50, 30);
g.drawString(msg, 80, 40);
}
}
最佳答案
对多个线程可见的变量通常很棘手。然而,字符串是不可变的,因此可以简化情况。
它是可见的,但不能保证修改后的普通值何时对其他线程可用。您应该使它成为 volatile
,这样它就不会在本地缓存线程。在分配 msg
之前使用局部变量构建新字符串。
如果您打算从其他线程修改stopFlag
,它也应该是volatile
。
关于java: 全局变量在线程中是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865256/
我是一名优秀的程序员,十分优秀!