没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String ...
分类:
其他好文 时间:
2021-01-08 11:35:10
阅读次数:
0
因为多线程的时候,线程之间的数据共享,最大的危险是都可以来修改变量例如 共享变量balance初始化为0 ,先加后减理论上最后的数值应该是0 ,但是经过t1,t2多次运行后balance的结果就不一定是0 代码正常运行就像下边: 那是因为 balance = balance + n 是先将balan ...
分类:
编程语言 时间:
2019-10-23 19:59:32
阅读次数:
76
1.尽量将共享变量(共享变量指的是在堆内存上创建的对象或者数组,包括成员变量、静态变量和数组元素。)定义为局部变量。 2.如果多线程只是读取变量,可以定义全局final。 3.使用ThreadLocal将变量创建为线程私有。 4.加锁 锁的重入指的是:当一个线程请求获得已经被其他线程获得的锁的时候, ...
分类:
编程语言 时间:
2019-02-21 00:33:22
阅读次数:
161
volatile关键字: 修饰变量,可以保证变量的可见性,但是无法保证对变量复合操作的原子性,如: static volatile int = 0; public static class T implements Runnable{ public void run(){ for(int k=0;k ...
分类:
编程语言 时间:
2018-11-02 01:58:52
阅读次数:
207
这是一篇翻译的文章 这里的正交是指你的设计实现解耦(decoupled):每一个部分都相互独立,一个部分的改变不会影响其他部分。 保持你的代码解耦 编写封闭的(shy)代码——是指一个模块不会向其他模块显露出任何不必要的东西,并且也不会依赖于其他模块的实现。如果你需要改变一个对象的状态(描述),那就 ...
分类:
其他好文 时间:
2018-06-18 18:19:22
阅读次数:
147
1 伪命题 这本身是个伪命题。 多线程之间使用队列是一定需要做到同步的。也就是说一定是需要同步手段的,一定要在一个线程读写的时候,阻塞另一个线程。既然不然用锁,那就是用原子变量吧。 2 CAS 3 实现 队列,这里使用链表来实现 然后,考虑push,在push的时候,要在push_start的nex ...
分类:
其他好文 时间:
2018-03-18 01:23:43
阅读次数:
195
代码块 在程序编写之中可以直接使用“{}”定义一段语句,那么根据此部分定义的位置以及声明的关键字的不同,代码块一共可以分为四种: 普通代码块 构造块 静态块 同步代码块(多线程时讲解)。 范例:编写普通代码块 范例:定义构造块 情况一:在非主类中使用静态块 情况二:在主类中定义静态块 ...
分类:
其他好文 时间:
2018-02-02 18:31:32
阅读次数:
132
多线程变量区域锁类定义 变量区域锁工作流程图 使用示例 ...
分类:
编程语言 时间:
2017-05-23 11:20:33
阅读次数:
179
摘要 atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操 作。atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么就是说,系统会自动的创建lock锁,锁定变量。nonatomic禁止多线程,变量保护,提高性能。 a ...
分类:
移动开发 时间:
2016-09-09 18:43:25
阅读次数:
162
线程局部变量ThreadLocal,是Java支持的一种线程安全机制,目的是解决多线程的并发问题。具体来讲,就是多个线程访问该实例对象的变量时,该实例对象将其存储为键值对的形式,保证各个线程(键)分别对应一份该变量值(值),从而保证多线程变量值得安全访问。ThreadLocal与同步机制比较同步机制...
分类:
编程语言 时间:
2016-01-22 10:50:50
阅读次数:
173