我试图了解

java中的线程安全机制,我需要一些帮助.我上课了:

public class ThreadSafe {

private Executor executor = new ScheduledThreadPoolExecutor(5);

private long value = 0;

public void method() {

synchronized (this) {

System.out.println(Thread.currentThread());

this.value++;

}

}

private synchronized long getValue() {

return this.value;

}

public static void main(String... args) {

ThreadSafe threadSafe = new ThreadSafe();

for (int i = 0; i < 10; i++) {

threadSafe.executor.execute(new MyThread());

}

}

private static class MyThread extends Thread {

private ThreadSafe threadSafe = new ThreadSafe();

private AtomicBoolean shutdownInitialized = new AtomicBoolean(false);

@Override

public void run() {

while (!shutdownInitialized.get()) {

threadSafe.method();

System.out.println(threadSafe.getValue());

}

}

}

}

在这里,我试图使值线程安全,一次只能由一个线程访问.当我运行这个程序时,我发现即使我将它包装在synchronized块中,也有多个线程对该值进行操作.当然这个循环将是无限的,但它只是一个例子,我几秒后手动停止这个程序,所以我有:

2470

Thread[pool-1-thread-3,5,main]

2470

Thread[pool-1-thread-5,5,main]

2470

Thread[pool-1-thread-2,5,main]

不同的线程正在访问并更改此值.有人可以向我解释为什么会这样吗?以及如何使这个全局变量线程安全?

java 全局变量线程安全_Java中的线程安全全局变量相关推荐

  1. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

  2. java 守护线程 作用_java中守护线程的一些概念和用法

    网上的资料中,守护线程的功能一般都是"只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用 ...

  3. python 在主线程开线程_Python开启线程,在函数中开线程的实例

    逻辑处理上分成了多个模块,为了提高效率,前一个模块处理完调用后一个模块操作时使用多线程 我这里遇到的情形是前面取数据后面存到mysql,发现单线程效率很低,改为取数据后开线程存到mysql 开启线程之 ...

  4. python可以开多少线程_Python开启线程,在函数中开线程的实例

    逻辑处理上分成了多个模块,为了提高效率,前一个模块处理完调用后一个模块操作时使用多线程 我这里遇到的情形是前面取数据后面存到mysql,发现单线程效率很低,改为取数据后开线程存到mysql 开启线程之 ...

  5. java中怎么判断一段代码时线程安全还是非线程安全_Java 中的多线程你只要看这一篇就够了...

    引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...

  6. java线程池怎么创建_java中的线程池,如何创建?

    Java中的线程池它是线程的容器,或者(换句话说,它是具有执行任务能力的线程的集合). 我们可以使用ThreadPool框架来定位(或实现)线程池. 线程池可以包含多个线程.每当我们执行任何任务时,线 ...

  7. java 获取线程某个_Java中如何唤醒“指定的“某个线程

    熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wait + notify完成. 比如: synchronized(o) { o.wait(); //wai ...

  8. java中线程总结_java中多线程学习笔记总结

    线程的简单学习笔记: 1.进程与线程的概念 进程:从用户角度看进程是应用程序的一个执行过程. 从操作系统核心角度看进程代表的是操作系统分配的内存和CPU时间片等资源的基本单位,是为正在运行的程序提供的 ...

  9. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

最新文章

  1. iptables相关管理命令
  2. 「AI不惑境」数据压榨有多狠,人工智能就有多成功
  3. iOS 解决导航栏pop返回时出现黑块问题!
  4. 【整理总结】Visual Studio 扩展和更新
  5. Kattis-What does the fox say 字符串处理+STL
  6. 一个关于c++ list迭代器的问题
  7. Actor-ES框架:消息发布器与消息存储器
  8. mysql表统一编码_PHP MySQL Apache统一编码
  9. propertysource注解 找不到文件_电脑提示Windows找不到文件?试试这两个技巧,轻松解决!...
  10. 配置数据库连接池的时候。
  11. CPU里都有几十亿个晶体管,万一坏掉几个还能用吗?
  12. bzoj1113[Poi2008]海报PLA
  13. golang 示例测试example_go语言从例子开始之Example37.Go 状态协程
  14. 解决pod没有权限问题
  15. 教你从零开始学习数据库!
  16. excel转置怎么操作_收藏!Excel表格常见问题,超详细的解决方案
  17. SSD模型物体检测(水下生物识别)
  18. 出租车收费管理系统(MyEclipse+Java)
  19. android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米
  20. 微信开发者工具-真机调试,可查看接口信息

热门文章

  1. python输出矩阵图片_Python图片与其矩阵数据互相转换
  2. 命名规范与注释规范概述
  3. abbex 区块学院如何交易之 第一章 你是谁?交易圈中的幽灵
  4. 使用Flutter重构斗鱼APP
  5. oracle rownum用法排序,利用rownum分组排序去重
  6. 关于使用友盟第三方平台集成第三方分享
  7. MySql时间日期函数及格式化详解
  8. html页面显示天气,HTML – 如何显示openweathermap天气图标
  9. 用计算机和手算标准差不一致,【PMP概念区分16】变量抽样
  10. 共享单车拿车还车java模拟_共享单车停放管理系统及其还车方法与流程