最近我尝试从一个线程(UI线程除外)访问一个文本框,并抛出异常.它说了一些关于"代码不是线程安全的",所以我最终编写了一个代表(来自MSDN的示例帮助),然后调用它.
但即便如此,我也不太明白为什么所有额外的代码都是必要的.
更新:如果我检查,我会遇到任何严重的问题
Controls.CheckForIllegalCrossThread..blah =true
Run Code Online (Sandbox Code Playgroud) 虽然我找到了答案,但我遇到了一个我很难理解的问题.请看这个并给我一个答案的解释.
public class TestSeven extends Thread {
private static int x;
public synchronized void doThings() {
int current = x;
current++;
x = current;
}
public void run() {
doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
问题和答案是......哪种说法是正确的?
A.编译失败.
B.在运行时抛出异常.
C.同步run()方法会使类成为线程安全的.
D.变量"x"中的数据受到保护,不会出现并发访问问题.
E. 将doThings()方法声明为static将使类成为线程安全的.
F.在同步(new Object()){}块中包装doThings()中的语句将使该类成为线程安全的.
大胆的一个作为答案.感谢您的回复!
我正在学习算法实现课程.我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面.真的吗?如果是这样,那意味着什么?我查了一下这个问题,很多答案都提到了同步.任何人都可以解释这意味着什么,以及如何使StringBuffer比StringBuilder更安全?