JAVA中线程在什么时候需要同步和互斥
JAVA中线程在什么时候需要同步和互斥?(假如这题是考试题,要怎样回答?最好详细点,不要举例子)...
JAVA中线程在什么时候需要同步和互斥?(假如这题是考试题,要怎样回答?最好详细点,不要举例子)
展开
2个回答
2013-10-23
展开全部
何时需要同步
在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。
对于非静态字段中可更改的数据,通常使用非静态方法访问
对于静态字段中可更改的数据,通常使用静态方法访问。
1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。
2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。
3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Class对象。静态和非静态方法的锁互不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁。
4、对于同步,要时刻清醒在哪个对象上同步,这是关键。
5、编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对“原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。
6、当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。
7、死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。
使用锁定还有一些其他危险,如死锁(当以不一致的顺序获得多个锁定时会发生死锁)。甚至没有这种危险,锁定也仅是相对的粗粒度协调机制,同样非常适合管理简单操作,如增加计数器或更新互斥拥有者。如果有更细粒度的机制来可靠管理对单独变量的并发更新,则会更好一些;在大多数现代处理器都有这种机制。
在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。
对于非静态字段中可更改的数据,通常使用非静态方法访问
对于静态字段中可更改的数据,通常使用静态方法访问。
1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。
2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。
3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Class对象。静态和非静态方法的锁互不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁。
4、对于同步,要时刻清醒在哪个对象上同步,这是关键。
5、编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对“原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。
6、当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。
7、死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。
使用锁定还有一些其他危险,如死锁(当以不一致的顺序获得多个锁定时会发生死锁)。甚至没有这种危险,锁定也仅是相对的粗粒度协调机制,同样非常适合管理简单操作,如增加计数器或更新互斥拥有者。如果有更细粒度的机制来可靠管理对单独变量的并发更新,则会更好一些;在大多数现代处理器都有这种机制。
2013-10-23
展开全部
同步:上一段代码没的完成,下一段必须等到上一段代码完成后才可以执行。如买票排队
异步:上一段代码没的完成,下一段不必等到上一段代码完成就可以执行。如手机发送短信。
例如访问同一个资源:
例如车站的售票系统,一定是多个线程同时运行售票的吧。
有编号为10000这张票,那么线程thread1正在卖它的时候,其余的线程就不能也卖这张票了。
另一个就是著名的生产者-消费者问题。类比一下,老爸挣钱,打到银行卡里,儿子花钱。(假设卡里有钱的话就暂时不打钱)
对于老爸老说,如果要打钱,查看一下卡,如果有钱,就暂时不放,并通知儿子已经有钱;如果没钱,当然就打钱了。
对于儿子来说,取钱时如果有钱就取,如果没有就等待,并通知老爸没钱了。
这就是同步了
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
面试的话 你就这样告诉他
线程的同步意味安全 譬如你取钱 你的执行语和我用的是相同对象 那你要在卡上扣除的钱数扣在我卡上了 怎么办
至于异步 是JAVA的闪亮点 设想下你搜索时 并没有提交 只打上关键字 就出现了很多提示 ,另外 异步在 体育节目方面的应用 在网上 你可以宣称 你的产品 可以让顾客看到赛场的比赛时钟 这就是用异步实现的
简单的说,同步就是防止多个线程访问同一个对象,造成数据不安全。
比如:一个男生和一个女生是男女朋友的关系,那么,另外的一个男生要想追到这个女生,就得先等前面这个男生和这个女生分手了以后才可以,两个男生不能同时访问这个女生,这就是同步;异步就是,在一个家庭中,几个兄弟姐妹可以同时拥有相同的父母,不需要等待,都可以同时拥有,同时访问。
异步:上一段代码没的完成,下一段不必等到上一段代码完成就可以执行。如手机发送短信。
例如访问同一个资源:
例如车站的售票系统,一定是多个线程同时运行售票的吧。
有编号为10000这张票,那么线程thread1正在卖它的时候,其余的线程就不能也卖这张票了。
另一个就是著名的生产者-消费者问题。类比一下,老爸挣钱,打到银行卡里,儿子花钱。(假设卡里有钱的话就暂时不打钱)
对于老爸老说,如果要打钱,查看一下卡,如果有钱,就暂时不放,并通知儿子已经有钱;如果没钱,当然就打钱了。
对于儿子来说,取钱时如果有钱就取,如果没有就等待,并通知老爸没钱了。
这就是同步了
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
面试的话 你就这样告诉他
线程的同步意味安全 譬如你取钱 你的执行语和我用的是相同对象 那你要在卡上扣除的钱数扣在我卡上了 怎么办
至于异步 是JAVA的闪亮点 设想下你搜索时 并没有提交 只打上关键字 就出现了很多提示 ,另外 异步在 体育节目方面的应用 在网上 你可以宣称 你的产品 可以让顾客看到赛场的比赛时钟 这就是用异步实现的
简单的说,同步就是防止多个线程访问同一个对象,造成数据不安全。
比如:一个男生和一个女生是男女朋友的关系,那么,另外的一个男生要想追到这个女生,就得先等前面这个男生和这个女生分手了以后才可以,两个男生不能同时访问这个女生,这就是同步;异步就是,在一个家庭中,几个兄弟姐妹可以同时拥有相同的父母,不需要等待,都可以同时拥有,同时访问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询