OCJP转储多线程ThreadSeven扩展Thread

 郭城镣 发布于 2023-02-10 12:56

我有来自OCJP转储的简单问题.

问题编号:220鉴于:

1. public class TestSeven extends Thread {
2.     private static int x;
3.     public synchronized void doThings() {
4.         int current = x;
5.         current++;
6.         x = current;
7.     }
8.     public void run() {
9.         doThings();
10.    }
11. }

哪个论述是对的?

A.编译失败.

B.在运行时抛出异常.

C.同步run()方法会使类成为线程安全的.

D.变量"x"中的数据受到保护,不会出现并发访问问题.

E.将doThings()方法声明为static将使类成为线程安全的.

F.在同步(new Object()){}块中包装doThings()中的语句将使该类成为线程安全的.

答案是选项E.

我的问题:作为方法doThings()已经同步,它不会使线程安全吗?

还请为这些主题提供一些很好的链接.

1 个回答
  • 问题是这x是一个静态变量,因此由所有线程共享.并且由于所有线程都没有在单个对象上同步(每个线程都this用作锁),因此没有什么能阻止两个线程doThings()并行执行该方法.因此,两个线程可能并行读取x的值,然后并行递增,缺少增量.

    制作doThings()静态会使所有线程在单个对象上同步:TestSeven.class

    2023-02-10 12:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有