线程同步(互斥)
同步的需求是指同一段代码,一个线程在执行的时候,不能有别的线程也在执行。
为此,Java提供了锁的机制:
synchronized(lock){
// some code need synchronized
}
一个线程在执行到同步代码块的时候,就需要先拿到lock对象作为锁,能拿到的前提是lock对象身上的锁还没有被别的线程拿走,否则就要等待了。执行完毕同步代码块之后,线程就会把lock对象的锁归还,别的线程才能获取到锁并继续往下执行。
怎样才能真正锁住是认真考虑的事情,锁对象的选择至关重要。这里要记住的一点是,字符串作为锁的时候一定要小心:
String key1 = "a";
String key2 = "a";
这个时候,key1和key2可以看成是同一个对象,用key1做为锁的线程和用key2作为锁的线程能够实现同步互斥。但是
String key1 = new String("a");
String key2 = new String("a");
或者
String key1 = p1 + p2;
String key2 = p1 + p2;
两种情况的key1和key2就不能作为锁了,因为他们是不同的对象。
代码块级别的锁使用的是显式的锁,就是明确指定了锁是哪个。成员方法级别的同步使用的是隐式的锁---this;同理,静态方法使用的锁则为该方法所在类的类对象(class)。
线程通信
线程通信指的是线程间的协调执行。
同步互斥的代码最好不要放到匿名的Thread内部类中,而应该归纳到一个外部类里面。
通过查询运行条件,判断是否该继续执行还是应该等待,继续等待就调用锁对象的wait方法。如果条件满足,自己执行完之后,如果条件满足,需要改变条件变量,并调用notify来唤醒其他等待的线程。
如此循环...
总的来说,线程通信依赖的是synchronized机制和条件变量。CPU不知道谁该执行谁该等待,它只会随机调一个线程来跑,线程只能依靠自身的检测来确定自己应该执行还是应该等待其他线程执行完毕满足条件之后再执行。这就是线程通信。
分享到:
相关推荐
这个程序演示了分别通过事件,全局变量,临界区,互斥量,信号量实现线程之间的通信与同步
线程和线程的概念 线程的创建 线程间的同步 线程的创建和终止 进程间的通信
进程线程通信,线程同步,异步,进程通信经典
传智播客_张孝祥_传统线程同步通信技术,看了一下,完全可以学习学习
1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
主要完成:根据特定的通信协议实现串口与PC上特定串口通信软件的通信。测试版,只是完成主要框架,没有完全将协议的所有通信方式方法做完。其中包含的测试功能有:监听主机(PC上的软件)发送的特定请求,能够识别...
java多线程知识点,源代码案例,代码案例中包括如何创建线程,主线程,线程优先级,线程组,线程同步,死锁,线程间的通信知识点
串口通信,线程同步 以及代码,线程的四种同步方式详细介绍以及使用方法
传统线程同步通信技术二传统线程同步通信技术二
传统线程同步通信技术一传统线程同步通信技术一
多线程同步和通讯完整示例,包括synchronized、wait-nofity机制、lock锁
掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。 三、内容和要求 软件界面上点“创建线程” 按钮,创建三个生产者线程(P1,P2,P3)和两个消费者线程(C1,C2),生产者...
通信协议,奇偶校验.zip上位机开发VC串口学习资料源码下[150]vc上位机串口程序,编写接受线程与发送线程,及线程之间同步。通信协议,奇偶校验.zip上位机开发VC串口学习资料源码下[150]vc上位机串口程序,编写接受...
互斥锁通信机制 条件变量通信机制 读写锁通信机制 线程与信号
而,编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。“同”字应是指协同、协助、互相配合。主旨在协同步调,按预定的先后次序运行。 线程同步 同步即协同步调,按预定的先后次序运行。 线程同步...
互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁绑定后,对该共享资源的访问如下操作: (1)在访问该资源前,首先申请该互斥锁,如果该互斥处于开锁状态,则申请到该...
线程间同步和通信之事件(静态),通过按键发送事件实现点灯,加强对事件的理解
进程与线程的通信与同步(理发师问题)的实现源代码,用互斥量实现的
线程间的通信一般采用四种方式:全局变量方式、消息传递方式、参数传递方式和线程同步法。线程间通信最简单的一种方法是使用全局变量,这用的就是全局变量的方式。