同步自吸泵代码块和同步自吸泵方法有什么区别

3被浏览413分享邀请回答0添加评论分享收藏感谢收起博客分类:
:线程如何进行的同步处理?你可以列举出那些同步级别?同步方法和代码块如何区别?
解答:在Java语言中,每个对象都有一个锁,一个线程可以通过关键字synchronized来申请获取某个对象的锁,关键字 synchronized可以被用于方法(粗粒度锁,对性能影响较大)或代码块(细粒度锁)级别。锁定方法往往不是一个很好的选择,取而代之的我们应该只 锁定那些访问共享资源的代码块,因为每一个对象都有一个锁,所以可以通过创建虚拟对象来实现代码块级别的同步,方法块级别的锁比锁定整个方法更有效
本文链接:
浏览: 360 次
来自: 深圳
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'同步方法与同步某个对象的区别?
[问题点数:40分,结帖人aotian16]
同步方法与同步某个对象的区别?
[问题点数:40分,结帖人aotian16]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|java同步代码块和同步方法的区别_百度知道
java同步代码块和同步方法的区别
我有更好的答案
1. 语法不同。2. 同步块需要注明锁定对象,同步方法默认锁定this。3. 在静态方法中,都是默认锁定类对象。4. 在考虑性能方面,最好使用同步块来减少锁定范围提高并发效率。
采纳率:77%
执行顺序不一样
只是作用范围不同~
为您推荐:
其他类似问题
勃兰兑斯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博客分类:
多线程加锁,2种方式
1.同步代码块,使用的锁可以是任意对象,但是操作共享资源时,锁必须唯一!
2.同步函数,使用的锁是this!
package com.gc.
public class SynchronizdMethod implements Runnable {
//共享资源
private int num = 1000;
//不同的线程进入不同的同步代码中,验证同步函数使用的锁与同步代码块的锁是否一致
//如果不一致,则会导致数据混乱!
boolean flag =
public void run() {
if(flag) {
//改变标记,当b线程开启后,执行run(),就会进入到同步函数中
while(true) {
//同步代码块。判断 num&0 和 num-- 都是对共享资源进行操作,所以要放在同步代码块中
synchronized(this) {
//只要本次的同步代码块中的代码没有执行完,其它线程无法进入,因为锁没有释放
System.out.println(Thread.currentThread().getName() + ": code segment---&" + num--);
while(true)
anotherThread();
//同步函数---使用函数对操作共享资源的代码进行封装,再将锁声明在方法上
//使用的锁是this,即传入Thread构造函数中的Runnable子类对象
private synchronized void anotherThread() {
System.out.println(Thread.currentThread().getName() + ": method---&" + num--);
开启多线程
package com.gc.
public class Demo {
public static void main(String[] args) {
SynchronizdMethod runnable = new SynchronizdMethod();
//传入同一个Runnable接口子类对象,让多线程操作Runnable中封装的共享资源
Thread a = new Thread(runnable);
Thread b = new Thread(runnable);
//开启线程
【注意:一个线程只能调用1次start(),多次调用将抛"线程运行状态异常"】
a.start();
//让主线程睡眠一小会,让a线程先执行,a线程将执行同步代码块中的代码
Thread.sleep(10);//主线程睡眠的目的:让a线程先进入到同步代码块中,将标记改为false
} catch (InterruptedException e) {
e.printStackTrace();
//a线程改变flag标记之后,再开启b线程,让b线程执行同步函数中的代码
b.start();
浏览: 280196 次
logback配置文件的改动会导致应用重新加载,多改动几次后就 ...
不是可以在log4j中配置以控制台或者文件方式保存日志的?
很棒,正缺这个,非常感谢
[size=x-small][/size]
有,和YAML的格式有关,不知道有没有什么好的YAML格式的验 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 线程安全和线程同步 的文章

 

随机推荐