2017年5月26日

Swing 是线程安全的?

摘要: 不是,Swing 不是线程安全的。 你不能通过任何线程来更新 Swing 组件,如 JTable、JList 或 JPanel,事实上, 它们只能通过 GUI 或 AWT 线程来更新。这就是为什么 Swing 提供 invokeAndWait() 和 invokeLater() 方法来获取其他线程的 阅读全文

posted @ 2017-05-26 22:16 辰_雨_ 阅读(128) 评论(0) 推荐(0) 编辑

Java 中怎么获取一份线程 dump 文件?

摘要: 在Linux下可以运行kill -3 PID来获取java的dump的文件。 在window下,可以按Ctrl + Break来获取。这样JVM就会 将线程的dump文件打印到标准输出或错误文件中他可以打印 在控制台或日志文件中具体位置应用的配置。 阅读全文

posted @ 2017-05-26 22:15 辰_雨_ 阅读(337) 评论(0) 推荐(0) 编辑

什么是 Busy spin?我们为什么要使用它?

摘要: Busy spin是一种在不释放CPU的基础上等待事件的技术。它经常用于避免丢失CPU的缓存 中的数据(如果线程先暂停,之后再其他CPU上运行就会丢失)。所以,如果你的工作要求 低延迟,并且你的线程目前没有任何顺序,这样你就可以通过循环检测队列中的新消息来代 替调用 sleep() 或 wait() 阅读全文

posted @ 2017-05-26 22:01 辰_雨_ 阅读(490) 评论(0) 推荐(0) 编辑

什么是多线程环境下的伪共享(false sharing)?

摘要: 伪共享是多线程系统(每个处理器有自己的局部缓存)中一个众所周知的性能问题。 伪共享发生在不同处理器上的线程对变量的修改依赖于相同的缓存行。 伪共享问题很难被发现,因为线程可能访问完全不同的全局变量,内存中确碰巧在 很相近的位置上。如其他诸多的并发问题,避免伪共享的最基本方式是仔细审查代码, 根据缓存 阅读全文

posted @ 2017-05-26 21:57 辰_雨_ 阅读(148) 评论(0) 推荐(0) 编辑

你是如何调用 wait()方法的?使用 if 块还是循环?为什么

摘要: 应该使在循环调用,当线程获取到CPU开始执行的时候,其他条件可能还没有满足,所以在处理前 循环检测条件是最好的满足条件会更好。如下代码: 阅读全文

posted @ 2017-05-26 21:48 辰_雨_ 阅读(240) 评论(0) 推荐(0) 编辑

10 个线程和 2 个线程的同步代码,哪个更容易写?

摘要: 从代码的角度上来说,两个的复杂度是相同的。因为同步代码与线程的数量是相互独立。 但是同步的策略选择依赖于线程的数量,因为越多的线程意味着更大的竞争所以需要利用 同步技术,如锁分离。 阅读全文

posted @ 2017-05-26 21:42 辰_雨_ 阅读(224) 评论(0) 推荐(0) 编辑

2017年5月20日

volatile的修饰符有过什么实践

摘要: 一种实践,用volatile修饰long或者double变量 ,使其能按原子类型来读写。 阅读全文

posted @ 2017-05-20 10:43 辰_雨_ 阅读(147) 评论(0) 推荐(0) 编辑

volatile 能使得一个非原子操作变成原子操作吗

摘要: 可以。使用volatile修饰的变量,线程在每次使用的时候,都会读取变量修改后最后的值。 例如一个典型的例子实在类中有long类型的成员变量。如果该变量被多个线程访问好把该 变量设置 为volatile,为什么,因为java读取long类型的变量,不是原子的,需要分两步 如果一个线程正在修改long 阅读全文

posted @ 2017-05-20 09:47 辰_雨_ 阅读(409) 评论(0) 推荐(0) 编辑

导航