美文网首页
2 线程通信

2 线程通信

作者: 起猿日 | 来源:发表于2018-11-25 15:01 被阅读0次

1. 什么是线程通信

当多个线程处理同一份数据且各线程任务不同时,就需要线程之间进行通信来避免对数据的争夺,从而保证数据的正确性。

2. 为什么使用线程通信

多线程并发时,默认情况下CPU是随机切换线程的。当我们需要多个线程共同完成一件任务并希望他们有规律执行时,那么这些线程间就需要协调通信以达到多线程共同操作一份数据

3. 线程通信的方法

通过Object类的wait(),notify(),notifyAll()方法来实现线程间的通信。

方法名 说明
wait() 通知当前线程进入等待状态并释放所持有的锁。
notify() 唤醒当前对象监视器上等待的单个线程。
notifyAll() 唤醒当前对象监视器上等待的所有线程。

4. 一些问题:

为什么notify(), wait()等函数定义在Object中,而不是Thread中?

Object中的wait(),notify()函数和sysnchronized一样,会对对象的同步锁进行操作。
wait()使当前线程进入等待并释放同步锁直到另一个线程(称唤醒线程)调用nofity()方法后等待线程才能继续执行,重点来了,这里的同步锁是对象持有的,且每个对象有且仅有一个!notify()只能唤醒同一对象监视器中调用wait()的线程,所以这些方法定义在对象中。也只有对象才能提供锁这个唯一的标识。

yield() 与 wait()的比较

1.wait()是让线程由“运行状态”进入到“等待状态”,而yield()让线程由“运行状态”进入到“就绪状态”。
2.wait()让线程释放对象同步锁,而yield()不会。

sleep() 与 wait()的比较

两者都会令当前线程进入“阻塞状态”但是wait()会释放对象的同步锁,而sleep()则不会释放锁。

相关文章

  • java基础-day22-多线程、线程通信和线程池

    多线程,线程通信和线程池 1. 多线程 1.1 线程状态 1.2 Object类中的方法 2. 线程通信 生产者消...

  • Android 面试常问知识

    Q1:线程间的通信进程间通信的几种方式进程间通信方式详解Q2:线程安全SharePreferences 是否线程安...

  • (七)iOS开发之多线程—多线程之间通信

    一.线程间通信 1.什么叫做线程间通信 在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。 2....

  • Java多线程(2)

    Java多线程(2) 线程间的通信 线程间的通信又称为进程内通信,多个线程实现互斥访问共享资源时会互相发送信号或等...

  • 2 线程通信

    1. 什么是线程通信 当多个线程处理同一份数据且各线程任务不同时,就需要线程之间进行通信来避免对数据的争夺,从而保...

  • JUC中线程之间得通信

    使用synchronized实现线程间通信,线程间通信:1、生产者+消费者2、通知等待唤醒机制.多线程编程模板:1...

  • ios 多线程的故事4

    线程间通信 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个...

  • 线程间通信

    线程间通信就是子线程和主线程之间的通信

  • Handler 机制 -- 1

    1.前言 *定义* 1.一套Android消息传递机制/ 异步通信机制 2.主线程和子线程的通信媒...

  • 线程与线程,进程与进程之间的通信

    线程与线程之间的通信 一,为什么要线程通信? 1>多个线程...

网友评论

      本文标题:2 线程通信

      本文链接:https://www.haomeiwen.com/subject/uuxpqqtx.html