下面我们再给出一个线程不安全的例子。
例:1.8.2
class BookMark_to_win {
int bookNum=10;
void onlySellOne() {
if (bookNum > 0) {
System.out.println(Thread.currentThread().getName()
+ " before" + bookNum);
bookNum--;
try {
Thread.sleep(1000);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()
+ " after " + bookNum);
}
}
}
public class Test {
public static void main(String[] args) {
BookMark_to_win bookM = new BookMark_to_win();
while (bookM.bookNum>0) {
bookM.onlySellOne();
}
}
}
更多请见:https://blog.youkuaiyun.com/qq_44639795/article/details/103096118
本文通过一个具体的示例探讨了线程安全的问题。示例中定义了一个BookMark_to_win类,该类包含一个整型变量bookNum,初始值为10。类中有一个onlySellOne方法用于模拟卖书操作,当bookNum大于0时,每调用一次该方法,bookNum的值减1,并打印当前线程名及bookNum的值。然而,在多线程环境下运行此程序可能导致bookNum的值出现错误,因为没有采取任何同步措施确保线程安全。
11万+

被折叠的 条评论
为什么被折叠?



