java笔记--关于Object类与线程相关的方法
关于Object类中的线程方法
Object类是所有Java类的 父类,在该类中定义了三个与线程操作有关的方法,使得所有的Java类在创建之后就支持多线程
这三个方法是:notify(),notifyAll(),wait(),这几个方法都是用来控制线程的运行状态的。
方法列表如下:
notify() : 唤醒在此对象监视器上等待的单个线程
notifyAll() : 唤醒在此对象监视器上等待的所有线程
wait() : 在其他线程时调用此对象的notify()或者notifyAll()方法前,导致当前线程等待
wait(long timeout) : 在notify()或者notifyAll()方法被调用之前或者超过指定的时间之前,导致当前线程等待
wait(long timeout,int nanos) : 在notify()或者notifyAll()方法被调用之前或者超过指定的时间之前,
或者其他线程中断当前线程之前,导致当前线程等待。
--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3905372.html "谢谢--
注意: 在Object类中,以上所有的方法都是final的,切记勿与Thread类混淆
且这几个方法要与Synchronized关键字一起使用,他们都是与对象监视器有关的,
当前线程必须拥有此对象的监视器,否则会出现IllegalMonitorStateException异常。
代码实例:
package com.xhj.thread; import java.util.Random; /** * Object类中与线程相关方法的应用 * * @author XIEHEJUN * */ public class ObjectThreadMethod { /** * 定义商品最高件数 */ private int count = 10; /** * 生产时记录仓库商品件数 */ private int sum = 0; private class Producter implements Runnable { @Override public void run() { for (int i = 0; i < count; i++) { int num = new Random().nextInt(255); synchronized (this) { if (sum == count) { System.out.println("仓库已满"); try { this.wait(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { System.out.println("生产商品" + num + "号"); this.notify(); sum++; System.out.println("仓库还有商品" + sum + "件"); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } private class Consomer implements Runnable { @Override public void run() { for (int i = 0; i < count; i++) { synchronized (this) { if (sum == 0) { System.out.println("仓库已经为空,请补货"); try { this.wait(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { System.out.println("消费着买去了一件商品"); this.notify(); sum--; System.out.println("仓库还有商品" + sum + "件"); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } /** * 调用线程服务 */ public void service() { Producter productor = new Producter(); Consomer consomer = new Consomer(); Thread thread1 = new Thread(productor); Thread thread2 = new Thread(consomer); thread1.start(); thread2.start(); } public static void main(String[] args) { // TODO Auto-generated method stub ObjectThreadMethod ob = new ObjectThreadMethod(); ob.service(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。