JAVA中线程在什么时候需要同步和互斥

关注:265  答案:6  mip版

解决时间 2021-01-27 08:10

提问者时光易老

2021-01-27 03:32

JAVA中线程在什么时候需要同步和互斥?(假如这题是考试题,要怎样回答?)

详细点

最佳答案

二级知识专家樱花雨梦

2021-01-27 04:13

例如访问同一个资源:

例如车站的售票系统,一定是多个线程同时运行售票的吧。

有编号为10000这张票,那么线程thread1正在卖它的时候,其余的线程就不能也卖这张票了。

另一个就是著名的生产者-消费者问题。类比一下,老爸挣钱,打到银行卡里,儿子花钱。(假设卡里有钱的话就暂时不打钱)

对于老爸老说,如果要打钱,查看一下卡,如果有钱,就暂时不放,并通知儿子已经有钱;如果没钱,当然就打钱了。

对于儿子来说,取钱时如果有钱就取,如果没有就等待,并通知老爸没钱了。

这就是同步了。

不知道你理解不?

全部回答

1楼吃貨一枚

2021-01-27 07:57

卖火车票、飞机票,两个人同时在两个地方买的两张票作为不能相同

2楼全球变暖丶我心却变冷

2021-01-27 06:32

我能这样理解吗?

上厕所时,如果只有一个位置,我必须等上一个人出来.

上厕所时,如果不只一个位置,我不用等上一个人出来. 就可以进去(假设有空位)

:-D

3楼柒夏锦年

2021-01-27 06:05

面试的话 你就这样告诉他

线程的同步意味安全 譬如你取钱 你的执行语和我用的是相同对象 那你要在卡上扣除的钱数扣在我卡上了 怎么办

至于异步 是JAVA的闪亮点 设想下你搜索时 并没有提交 只打上关键字 就出现了很多提示 ,另外 异步在 体育节目方面的应用 在网上 你可以宣称 你的产品 可以让顾客看到赛场的比赛时钟 这就是用异步实现的

4楼有你才幸福

2021-01-27 05:54

何时需要同步 在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。 对于非静态字段中可更改的数据,通常使用非静态方法访问 对于静态字段中可更改的数据,通常使用静态方法访问。 1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。 2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。 3、对于静态同步方法,锁是针对这个类的,锁对象是该类的class对象。静态和非静态方法的锁互不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁。 4、对于同步,要时刻清醒在哪个对象上同步,这是关键。 5、编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对“原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。 6、当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。 7、死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。 使用锁定还有一些其他危险,如死锁(当以不一致的顺序获得多个锁定时会发生死锁)。甚至没有这种危险,锁定也仅是相对的粗粒度协调机制,同样非常适合管理简单操作,如增加计数器或更新互斥拥有者。如果有更细粒度的机制来可靠管理对单独变量的并发更新,则会更好一些;在大多数现代处理器都有这种机制。

5楼爷自有爷的范

2021-01-27 04:50

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

java什么时候需要同步_JAVA中线程在什么时候需要同步和互斥相关推荐

  1. java 线程 wait 一定要同步_java中使用wait就得使用同步锁,而且2个线程必须都使用同步代码块,否则就会异常...

    标签: 标题已经说明,子线程wai()时候默认的锁不是同步代码块的锁,因此wai时候显示的指明锁,现在解释看code: public class Test { //staticboolean flag ...

  2. java线程等待_java 中线程等待与通知的实现

    java 中线程等待与通知的实现 前言: 关于等待/通知,要记住的关键点是: 必须从同步环境内调用wait().notify().notifyAll()方法.线程不能调用对象上等待或通知的方法,除非它 ...

  3. java for(o t :object) 获取顺序号_java中线程的生命周期

    线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发. java中Thread的状态 java中Thread有6种状态,分别是: NEW – 新创 ...

  4. java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

    <尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...

  5. java中线程池的使用_Java中线程池的简单使用

    什么是线程池? 顾名思义线程池就是线程的容器 举个例子:在没有共享电源的年代,车站有5个人手机都没电且都没有带电源,这五个人想要给手机充电只能去车站的售货亭各花100块钱买一个移动电源:但是现在共享电 ...

  6. java如何忽略过程值_Java中容易被你忽略的细节(四)

    1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来 ...

  7. [知了堂学习笔记]_Java中线程的学习(一)

    请关注"知了堂学习社区",地址:http://www.zhiliaotang.com/portal.php 线程 1.线程的概念 线程,有时被称为轻量级进程(Lightweight ...

  8. Java并行有优势吗_Java中不同的并发实现的性能比较

    Fork/Join框架在不同配置下的表现如何? 正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半.并行流(Parallel Stream)的语法糖就像预告片里的新型光剑一样令人兴奋不已.现 ...

  9. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

最新文章

  1. 记录一下python绘制地图
  2. 那个当上非洲酋长的交大才子,如今怎么样了?
  3. redis安装,主从集群
  4. 分享25个优秀的网站底部设计案例
  5. 图论 —— 最短路 —— Floyd 算法
  6. GAN —— 《Generative Adversarial Nets》
  7. linux 线程的运行时间吗,Linux下巧用ps得到运行线程个数和线程启动时间
  8. django 多并发,多线程。
  9. Git的介绍和常用命令使用
  10. 机器人弹古筝图片_除了百度,还有这些搜索引擎哦:深网搜索引擎「第二弹」...
  11. Django之路——4 Django的视图层
  12. AtCoder ARC 076D - Built?
  13. 抖音java表白教程_抖音vbs表白代码制作方法分享
  14. MindManager下载和使用
  15. 重返设计模式--命令模式
  16. SAP PO中如何打印预览,找到Message type以及找到驱动程序和Form输出程序
  17. VS(SQL Server一样)设置护眼背景色
  18. 快来看看你的苹果手机还能卖多少钱?2022最新苹果手机回收报价单
  19. t版免费申请esim
  20. LOJ#6089 小 Y 的背包计数问题 - DP精题

热门文章

  1. java实现 XSS攻击防护
  2. spring的@ControllerAdvice注解
  3. try catch finally 中包含return的几种情况,及返回结果
  4. Linux编译soci库,Soci库linux下的编译方法
  5. git提交到github总是要输入密码_GitHub不为人知的秘密
  6. IDEA——必备插件指南
  7. c语言程序设计的几种循环,C语言程序设计教案 第六章 循环程序设计.doc
  8. hasp 加密 java_加密软件HASP的使用说明
  9. oracle windows server 2008,Node.js 在 Windows Server 2008 X64 连接Oracle 数据库
  10. 华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...