秦皇岛网站建设哪家好,搭建网站分类,wordpress网址改错了,医院网站建设运行管理办法JAVA多线程的实现
JAVA有两种方法创建线程 #xff08;1#xff09;继承Thread类 #xff08;2#xff09;实现Runnable接口 这两种方法都要用到Thread类以及相关方法
Thread类
是一个具体的类#xff0c;不是抽象类#xff0c;封装了线程的行为 利用Thread类创建一个…JAVA多线程的实现
JAVA有两种方法创建线程 1继承Thread类 2实现Runnable接口 这两种方法都要用到Thread类以及相关方法
Thread类
是一个具体的类不是抽象类封装了线程的行为 利用Thread类创建一个线程必须创建一个从Thread类导出的新的子类必须覆盖Thread的run()方法来完成线程的工作 当线程启动时必须调用Thread的start()函数
Runnable接口
该接口只有一个函数run()此函数必须由实现了此接口的类实现 当使用该接口时不能直接创建所需类的对象并运行它必须从Thread类的一个实例内部运行它 既然有了Thread类为什么还需要Runnable接口 JAVA是单继承多实现一个JAVA类只能继承一个父类但可以同时实现多个接口。如果一个类已经继承了一个其他的父类又要实现多线程时那么就不能继承Thread类来实现而要通过Runnable接口定义多线程 多线程程序编写关键操作
1定义用户线程的run()方法 2用new创建对象建立用户线程实例 3启动线程调用线程对象的start()方法
利用Thread子类创建线程
写一个子类继承Thread类并覆盖其中的run方法run中的代码就是线程要实现的功能 创建子类对象 start方法启动线程
Runnable接口创建线程
定义一个Thread类对象利用Thread构造方法将本类作为参数传递给Thread对象
互斥
当多个线程需要访问同一资源而这一资源在某一时刻只允许一个线程访问则这些线程是互斥的
同步
多个线程需要访问同一资源而且需要相互配合才能正常工作则这些线程运行时就是一种同步关系
临界区
存放共享资源的区域一次只允许一个线程进入该区域被称为临界资源。线程在访问共享资源前需要进行检查看自己能否对该资源访问。如果有权访问还需要阻止其他线程进入该区域
死锁
多个线程相互等待其他线程释放资源且所有线程都不能释放自己所占用的资源从而导致相关线程处于永远等待的状态
信号量
用于解决进程间的互斥和同步 信号量的设置必须使用PV原语 PV原语方法及关键字 public final void wait() 告知被调用的线程放弃管程进入睡眠直到其他线程进入相同管程并调用notify()将本线程转入阻塞状态 public final void notify() 恢复相同对象中第一个调用wait的线程 public final void notifyAll() 恢复相同对象中所有调用wait的线程具有最高优先级的线程最先运行 synchronized 标志被同步使用的资源系统为资源分配管程保证在某一时间内只有一个线程对象在享有这一资源也被称为对象锁 线程互斥步骤
设置一个各个线程共享的信号量值为true或false 线程需要访问共享资源前先检测信号量的值。如果不可用则调用wait()转入等待状态 如果可用则改变信号量的状态不让其他线程进入 访问完共享资源后再修改信号量状态允许其他线程进入 调用notify()或notifyAll(),唤醒其他等待的线程
线程的同步
为了实现线程之间严格交替运行需要对线程进行同步控制 两个需要同步的线程会根据信号量的值判断自己能否进入临界区。比如一个线程只有当信号量为真时才能进入而另一个则是假时进入 最后用对象名.notify()的当时唤醒指定的某线程类创建的线程对象
生产者消费者问题
设计一个公共类并用该类创建一个对象信号量和共享资源都以静态成员变量的形式存在于对象中。无论哪个线程对象访问的都是同一个信号量和共享资源 同样将生产方法和消费方法都封装到这个公共类中 信号量是介于[0,BUFFERSIZE]之间的整型数因为缓冲区允许连续多个生产者或消费者线程进入