美文网首页
多线程笔记1-线程的共享与协作

多线程笔记1-线程的共享与协作

作者: tangYaXin | 来源:发表于2020-05-17 17:01 被阅读0次

    什么是多线程的共享? 什么是多线程之间的协作?

    多线程的共享:是指多个线程访问同一个对象。

    多线程的协作是指:当A线程需要执行的操作依赖于B线程,这时候A线程需要B线程执行完成之后通知A线程来执行。所谓多个线程之间的协作,来完成任务。使用的方法(在内置锁中)为wait()和notify(),notifyAll();这3个方法都是Object中的方法。 显示锁Lock,需要Load接口方法的newCondition()来获取Condition的实例,调用condition.await()  condition.signal()与signalAll(). 需要注意的是,内置锁的方式尽量使用notifyAll()来唤醒线程。

    因为notify()方法只能唤醒某一个线程,且不能指定哪一个线程。 显示锁的方式尽量使用signal(),因为通过newCondition()方式可以获取多个不同的Condition实例,从而实现业务逻辑。

    等待与唤醒的标准范式

    等待方

    synchronized(对象){

    while(条件不满足){

    wait();

    }

    执行业务逻辑

    }

    通知方

    synchronized(对象){

    执行相关的逻辑。将条件设置为满足

    notifyAll()

    }

    以上为等待唤醒机制的标准范式,可以看到,等待方和通知方执行操作时都是会拿锁的,为什么要还这么写呢?因为wait是会释放当前的锁的,notifyAll()不会释放锁,只有在synchronized关键字所包含的代码块执行完成之后才会释放锁。

    相关文章

      网友评论

          本文标题:多线程笔记1-线程的共享与协作

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