多线程

几种类型的线程,优缺点:https://blog.csdn.net/m0_37840000/article/details/79756932(未看)
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用四种方式来创建线程,如下所示:
1)继承Thread类创建线程--单继承
2)实现Runnable接口创建线程--接口灵活,降低耦合度
3)使用Callable和Future创建线程--有返回值,重写call()方法,声明抛出异常,底层是runnable方法,存了返回值和异常:Java并发编程:Callable、Future和FutureTask(未看)Java多线程之Callable接口的实现(实例有用)
4)使用线程池例如用Executor框架

  //创建并启动线程

    MyThread2 myThread=new MyThread2();
    Thread thread=new Thread(myThread);
    thread().start();

为什么wait(),notify(),notifyAll()在object类里,为什么这些操作线程的方法要定义在object类中呢?
简单说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify();所以wait和notify属于Object。
专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。
也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中。
wait()方法与notify()必须要与synchronized(resource)一起使用;
Java多线程学习之wait、notify/notifyAll 详解

notify():
唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。

notifyAll():
唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个 wait 方法,在对象的监视器上等待。

线程间的通信方式:
多线程之间的通信(未看)

线程间通信的几种实现方式https://blog.csdn.net/jisuanji12306/article/details/86363390
共享内存和消息传递
使用 volatile 关键字
使用Object类的wait() 和 notify() 方法,注意: wait和 notify必须配合synchronized使用,wait方法释放锁,notify方法拿到锁
使用JUC工具类 CountDownLatch
使用 ReentrantLock 结合 Condition
基本LockSupport实现线程间的阻塞和唤醒

AVA多线程之线程间的通信方式(未看)
分布式系统中说的两种通信机制:共享内存机制和消息通信机制。
感觉前面的①中的synchronized关键字和②中的while轮询 “属于” 共享内存机制,由于是轮询的条件使用了volatile关键字修饰时,这就表示它们通过判断这个“共享的条件变量“是否改变了,来实现进程间的交流。
而管道通信,更像消息传递机制,也就是说:通过管道,将一个线程中的消息发送给另一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值