做多线程有段时间了,回首看自己原来的代码,很是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;
}
}
}
希望能够得到跟多批评
分享到:
相关推荐
### MySQL主从服务器同步心得与实操技巧 #### 前言 MySQL 数据库作为一款广泛应用的关系型数据库管理系统,其高可用性和数据安全性一直是开发者关注的重点。为了提高系统的可用性及减轻单点故障的风险,MySQL 提供...
1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间; 2)MySQL的master与slave机器记得server-id要保持不...
操作系统实验四的进程同步实验是深入理解并发协作进程同步与互斥的重要实践环节。通过这个实验,学生可以直观地观察到并发进程如何进行同步与互斥操作,从而增强对这两个核心概念的认识。实验报告旨在分析经典进程...
实验截图和心得体会部分未提供,但可以想象在运行过程中,生产者、消费者和检查员线程交替运行,仓库的状态在满和空之间变化,展示了进程同步的有效性。通过这样的实践,我们可以更深刻地理解操作系统中的进程同步...
操作系统中的进程同步是多线程或并发执行时保持系统稳定性和正确性的重要概念。这个实验主要是基于北邮操作系统课程的第三次实验,目的是让学生通过实践理解并掌握进程同步的基本原理和方法。实验使用C语言编程,并...
在本实习项目中,我们将深入探讨数字信号处理(DSP)技术以及其在同步串口通信系统中的应用。首先,我们要了解什么是数字信号处理及其在现代通信系统中的重要性。数字信号处理是通过数字计算机或专用处理器对信号...
进程同步与互斥实验报告 操作系统实验报告《进程同步与互斥》实验的主要目的是掌握基本的进程同步与互斥算法,了解生产者-消费者问题,并学习使用 Windows 2000/XP 中基本的同步对象,掌握相关 API 的使用方法。...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...
在这个名为"线程同步与通信范例"的程序中,它通过五种不同的机制展示了线程间如何进行有效通信和同步:事件、全局变量、临界区、互斥量和信号量。 1. **事件(Event)**:事件是一种同步机制,允许一个线程等待特定...
该实验旨在比较Unix系统中同步与异步`write`系统调用的效率差异。实验主要分为以下几个部分: 1. **实验目的**: - 学习和理解Unix中的文件I/O系统调用,特别是`write`函数的同步和异步模式。 - 分析不同缓冲区...
【三华同步电网学习心得】 在深入学习"三华"同步电网的过程中,我深刻认识到这一电网建设的重要性。"三华"同步电网是指华北、华东、华中三大区域电网的互联互通,旨在解决我国能源资源与消费中心逆向分布的问题,...
永磁同步电机(PMSM)是现代工业领域中一种重要的电动机类型,因其高效、紧凑及出色的性能而被广泛应用。这种电机的核心特点是其永磁体产生的磁场与电枢电流产生的磁场同步旋转,从而实现高效的能量转换。在工业自动...
在操作系统领域,进程同步是多线程或多进程环境下确保数据一致性、避免竞态条件和死锁等问题的关键技术。本文将深入探讨"经典进程同步问题",以C/C++语言为实现工具,通过三个简单易懂的程序来阐述相关概念。 首先...
八、心得与体会 课程设计不仅是理论知识的实践,也是问题解决能力的锻炼。通过设计、实施、调试,学生可以深入理解PLC、变频器以及同步控制系统的运作机制,提高工程实践能力。 附录部分包括参考文献和程序清单,...
学习“三华”同步电网,我深感电力行业在当今社会中的关键角色。三华同步电网,是指将华北、华中和华东三个地区的电网通过特高压技术连接起来,形成一个大范围的电力资源共享网络,旨在解决我国能源分布不均与用电...