首页 > 试题广场 >

以下哪个不能用来处理线程安全

[不定项选择题]
以下哪个不能用来处理线程安全
  • synchronized关键字
  • volatile关键字
  • Lock类
  • transient关键字
synchrozied关键字称作同步,主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时访问同一对象的加锁方法/代码块时,只能有一个线程执行能执行方法/代码块中的代码,其余线程必须等待当前线程执行完以后才执行该方法/代码块。
volatile关键字1.保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改)。2.禁止了指令重排序.
Lock接口提供了与synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。
transient关键字  简单地说,就是让某些被修饰的成员属性变量不被序列化。

发表于 2019-11-29 13:35:34 回复(6)
valitale关键字也不能保证线程的安全性,因为它不具备原子性
发表于 2019-08-24 09:16:33 回复(14)
transient,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。当一个变量不希望被持久化的时候,比如说一些账号密码,就可以用transient关键字来表示该变量不参与序列化过程。
发表于 2019-08-17 23:12:06 回复(0)
volatile关键字不能保证线程安全啊!为什么不选B
发表于 2019-09-01 09:39:29 回复(1)
当一个变量不希望被持久化的时候,可以用transient关键字来表示该变量不参与序列化过程。
发表于 2022-02-13 22:13:11 回复(0)
synchrozied关键字称作同步,主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时访问同一对象的加锁方法/代码块时,只能有一个线程执行能执行方法/代码块中的代码,其余线程必须等待当前线程执行完以后才执行该方法/代码块。
volatile关键字1.保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改)。2.禁止了指令重排序.
Lock接口提供了与synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。
transient关键字  简单地说,就是让某些被修饰的成员属性变量不被序列化。
发表于 2021-01-18 11:48:48 回复(0)

单纯使用 volatile 关键字是不能保证线程安全的

  • volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程
  • volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;读 volatile 变量时,JMM 会把线程对应的本地内存设置为无效,直接从主内存中读取共享变量
  • 当把变量声明为 volatile 类型后,JVM 增加内存屏障,禁止 CPU 进行指令重
发表于 2020-02-29 09:22:15 回复(0)

一看有争议的题就知道是360

发表于 2019-11-13 10:55:55 回复(0)
volatile修饰一个变量时,可以保证当前线程对该变量操作的可见性。当前线程有改变变量时,其他线程保存的副本将失效,其他线程会从主内存中重新读取。volatile只保证对它修饰的变量的读写操作具有原子性
发表于 2019-11-28 19:43:56 回复(0)

单纯不认识

发表于 2019-10-05 08:56:19 回复(0)
原来是个多选题啊
发表于 2022-07-05 16:23:54 回复(0)
volatile关键字只能保证可见性,不能保证原子性
发表于 2021-09-08 00:26:36 回复(0)
volatile表示当某一个线程修改该变量时,可以立刻被其它线程所看到,搭配上CAS算法后,可以达到线程安全。乐观锁机制
发表于 2019-10-15 23:57:56 回复(0)
线程安全问题的三大特性
1.原子  2. 可见  3.有序

加锁能解决所有并发问题。 都串行化了,单线程执行不会有并发问题。
volatile解决了可见性和有序性的问题, 不能保证原子性。

实践:
10个线程执行,i++操作,每个线程执行++操作1000次,按理说答案是10000.

什么都不加,实际执行结果7k多。
对 i 变量加了volatile,执行结果9k多,准确率提高。
对i++操作加锁,执行结果1w,正确。
发表于 2022-09-05 14:27:40 回复(0)
这种模糊不清的题怎么通过的
发表于 2022-03-04 09:37:32 回复(0)

实现,继承都具有遗传性,实现了seriablizable的类的子类也实现serializable

基本类型,包装类,String默认是serializable。

一个类实现serializable同时要保证其成员变量实现serializable。

transient修饰成员变量使其不被序列化。

编辑于 2021-07-07 08:43:12 回复(0)
transient关键字来表示变量不参与序列化过程
发表于 2021-06-09 09:09:26 回复(0)
我总觉得这题目不严谨,严格来说,volatile也不能算线程安全
发表于 2021-02-21 09:18:03 回复(0)
volatile如果变量的改变不依赖当前变量,还是线程安全的啊,看你怎么用而已。
发表于 2023-11-02 22:19:23 回复(0)
转:
synchrozied关键字称作同步,主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时访问同一对象的加锁方法/代码块时,只能有一个线程执行能执行方法/代码块中的代码,其余线程必须等待当前线程执行完以后才执行该方法/代码块。
volatile关键字1.保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改)。2.禁止了指令重排序.
Lock接口提供了与synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。
transient关键字  简单地说,就是让某些被修饰的成员属性变量不被序列化。
volatile关键字是不能保证线程安全的,保证线程安全的前提是必须保证原子性,可见性,有序性,三个同时满足哦 ,为理解视频答案就只能把保证理解成处理
发表于 2023-05-08 17:05:00 回复(2)