java 关于线程的问题

线程的常用方法:sleep()、wait()、notify()、notifyAll()的作用,哪些方法会抛出异常,什么异常?2.如何创建线程对象(两种方式)... 线程的常用方法:sleep()、wait()、notify()、notifyAll()的作用,哪些方法会抛出异常,什么异常?
2. 如何创建线程对象(两种方式)
展开
 我来答
匿名用户
2013-12-28
展开全部

作用:

sleep():Thread类方法,用来控制自身流程。

wait():Object类方法,调用此方法时,被调对象进入等待状态,直到被唤醒或等待时间到。

notify():唤醒一个正在等待该对象的线程。

notifyAll():唤醒所有正在等待该对象的线程。


异常:

wait(),notify():java.lang.IllegalMonitorStateException。

wait(),sleep():InterruptedException。


创建线程:

1 通过扩展Thread类来创建多线程

public class MutliThreadDemo {
    public static void main(String [] args){
        MutliThread m1=new MutliThread("Window 1");
        MutliThread m2=new MutliThread("Window 2");
        MutliThread m3=new MutliThread("Window 3");
        m1.start();
        m2.start();
        m3.start();
    }
}
class MutliThread extends Thread{
    private int ticket=100;//每个线程都拥有100张票
    MutliThread(String name){
        super(name);//调用父类带参数的构造方法
    }
    public void run(){
        while(ticket>0){
            System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
        }
    }
}

2 通过实现Runnable接口来创建多线程

public class MutliThreadDemo2 {
    public static void main(String [] args){
        MutliThread m1=new MutliThread("Window 1");
        MutliThread m2=new MutliThread("Window 2");
        MutliThread m3=new MutliThread("Window 3");
        Thread t1=new Thread(m1);
        Thread t2=new Thread(m2);
        Thread t3=new Thread(m3);
        t1.start();
        t2.start();
        t3.start();
    }
}
class MutliThread implements Runnable{
    private int ticket=100;//每个线程都拥有100张票
    private String name;
    MutliThread(String name){
        this.name=name;
    }
    public void run(){
        while(ticket>0){
            System.out.println(ticket--+" is saled by "+name);
        }
    }
}
空号一号
2013-12-28 · TA获得超过3845个赞
知道大有可为答主
回答量:1495
采纳率:0%
帮助的人:1599万
展开全部
以下摘自JDK API。注意除了sleep()以外的方法都是继承自Object类。

static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
抛出:
InterruptedException
- 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态被清除。

static void sleep(long millis, int nanos)
在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
抛出:
IllegalArgumentException
- 如果 millis 值为负或 nanos 值不在 0-999999 范围内。
InterruptedException
- 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。

void wait()
在其他线程调用此对象的 notify() 方法或 notifyAll()
方法前,导致当前线程等待。
抛出:
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。
InterruptedException
- 如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除。

void wait(long timeout)
在其他线程调用此对象的 notify() 方法或 notifyAll()
方法,或者超过指定的时间量前,导致当前线程等待。
抛出:
IllegalArgumentException
- 如果超时值为负。
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。
InterruptedException
- 如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除。

void wait(long timeout,
int nanos) 在其他线程调用此对象的 notify() 方法或 notifyAll()
方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
抛出:
IllegalArgumentException
- 如果超时值是负数,或者毫微秒值不在 0-999999 范围内。
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。
InterruptedException
- 如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除。

void notify()
唤醒在此对象监视器上等待的单个线程。
抛出:
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。

void notifuAll()
唤醒在此对象监视器上等待的所有线程。
抛出:
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。

--------------------------
创建线程的2种方法,摘自本人的Java笔记

1、继承Thread类,然后重载方法run()。
例:
class CustomThread extends Thread { run() { /*thread code here*/ }}
CustomThread thread1 = new CustomThread();
thread1.start();
用start()来启动此线程,线程将执行run()一次然后被杀死。
这种方法写起来比较简单,但是新类不能再继承其他的类。

2、实现Runnable接口,然后用这个类创建Thread类对象。
例:
class CustomThread implements Runnable { run() {/*thread code here*/ }}
Thread thread1 = new Thread(new CustomThread());
thread1.start();
这种略抽象略麻烦,但新类可以再继承另外的类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c791e51
2013-12-28
知道答主
回答量:2
采纳率:0%
帮助的人:2797
展开全部

 如何创建线程对象(两种方式)

  1. 创建一个类,继承Thread类,并重写run()方法(你所要实现的代码)。

  2. 创建一个类,实现Runnable接口,并重写run()方法(你所要实现的代码)。

 

wait()、notify()、notifyAll() 都是继承者Object类的方法,然而sleep()是继承自线程类的一个方法。

sleep():

public static void sleep(long millis)
  throws InterruptedException

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。

notify():

public final void notify()

唤醒在此对象监视器上等待的单个线程。(可能抛出的异常类 IllegalMonitorStateException)

notifyAll():

public final void notifyAll()

唤醒在此对象监视器上等待的所有线程。(可能抛出的异常类 IllegalMonitorStateException)

wait() :

public final void wait()
throws InterruptedException

或者  public final void wait(long timeout, int nanos)throws InterruptedException

在其他线程调用此对象的 notify() 方法或 notifyAll()
方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式