码迷,mamicode.com
首页 > 编程语言 > 详细

java笔记--关于Object类与线程相关的方法

时间:2014-08-11 20:52:02      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   os   io   

关于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();
    }

}

java笔记--关于Object类与线程相关的方法,布布扣,bubuko.com

java笔记--关于Object类与线程相关的方法

标签:style   blog   http   color   java   使用   os   io   

原文地址:http://www.cnblogs.com/XHJT/p/3905372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!