做多线程有段时间了,回首看自己原来的代码,很是sb,故在此做出点sb的总结
首先讨论下synchronized,也就是java的内部锁,这也是最常用的同步
个人理解,如有雷同,纯属倒霉。
。。。。。。
多谢各位批评,之前的观点的确有很大问题;为了避免误人子弟,我已经把之前的三点观点删除了,那么重新来整理一下java的synchronized。
首先从synchronized方法说起,在一个类中的所有synchronized方法都是共用的一把锁;例如当一个对象在一个进程中进入了同步方法,获得了对象锁(本人称其为对象锁,非专业名词),那么在其他进程中这个对象就进不了同步方法,直到第一个进程释放对象锁,但是可以访问其他的非同步方法,和public属性。
那么说一下本人误解最大的synchronized(this),这个只是同步块的一种写法,其实也是用的上边的那把锁-对象锁。当一个进程进入synchronized(this)块,其他的进程就无法进入synchronized(this)块,以及synchronized方法。
那个synchronized(object)同步块,object当然不止可以是this,可以是任何对象(非空对象),一般锁的是同步块所使用的资源。
同步块,还有一种写法是synchronized(object.class),这样是锁object这个类,那么这样只允许object的一个对象的一个进程获得这个类锁
下面贴出个demo,是synchronized(this)的测试,代码很简单,就不做什么解释了
public class CollectionSynchronize
{
public static void main(String[] args)
{
CollectionSynchronize co = new CollectionSynchronize();
final SynchThis synthis = co.new SynchThis();
ExecutorService exec = Executors.newFixedThreadPool(100);
Runnable a = new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
synthis.aa();
}
};
Runnable b = new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
synthis.bb();
}
};
Runnable c = new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
synthis.b = 10000;
System.out.println(synthis.getb());
}
};
exec.submit(a);
exec.submit(b);
exec.submit(c);
exec.shutdown();
}
class SynchThis
{
public void aa()
{
synchronized (this)
{
System.out.println("获取this锁");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("解锁this锁");
}
}
public synchronized void bb()
{
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("run work");
}
public int b = 10;
public int getb()
{
return b;
}
}
}
希望能够得到跟多批评
分享到:
相关推荐
1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间; 2)MySQL的master与slave机器记得server-id要保持不...
原来看过MYSQL同步数据的实现,可是自己还没有动过手,今天没什么事就玩一玩,正好在旁边有另一台空电脑,都在同一个路由器下。哈哈,正好。
(1)了解操作系统进程同步的基本概念和准则。 (2)理解信号量机制及P、V操作含义。 (3)了解经典进程同步问题,掌握信号量方法解决进程同步问题的方法。 包括实验目的,截图,心得体会,代码
操作系统实验报告四 进程同步实验报告。加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解Linux系统中IPC进程同步工具的...
学习三华同步电网心得体会 (4).docx
北邮操作系统第三次实验作业,进程同步。。C语言编写。。。windows环境下运行。。欢迎大家下载。。。↖(^ω^)↗。。附带实验报告哦。。亲
永磁同步电机(PMSM)是一种多变量、强非线性、时变被控对象,永磁同步电机因其体积小、磁密度高、可靠性好以及对环境适应性强等诸多优点被广泛应用于工农业生产和航空航天等领域。而伴随着这些领域的不断发展更高的...
三华同步电网学习心得_1 (2).docx
java多线程下wait和notify的作用
“三华”同步电网知识学习心得 (2).docx
操作系统实验报告_进程同步与互斥.doc
unix实验二 同步与异步write的效率比较 很详细
这个程序演示了分别通过事件,全局变量,临界区,互斥量,信号量实现线程之间的通信与同步
DSP技术及应用实习-离散余弦变换(DCT)算法。
参考相关文档,结合自己的理解所作出的学习总结。内容深入浅出,通俗易懂!
多线程编程学习的心得体会,仅供参考,如有偏差出,还请不吝赐教。
1.由于设置了slave的配置信息,mysql在数据库data目录下生成master.info,所以如有要修改相关slave的配置要先删除该文件,否则修改... 您可能感兴趣的文章:mysql 主从服务器的简单配置mysql主从服务器同步心得体会配置My
操作系统 c/c++语言 运行成功 简单易懂 三个程序