Java多线程机制——理论题

【简答1】引起线程中断的常见原因是什么?

答案解析

有4种原因的中断:

  • (1)JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。
  • (2)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。
  • (3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。
  • (4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。

【简答2】在多线程中,为什么要引入同步机制?

 答案解析:

        使用setPrority(int grade)方法Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱

【简答3】线程调用interrupt()的作用是什么? 

正确答案:

        “吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用interrupt方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源 

 【简答4】在什么方法中wait()方法、notify()及notifyAll()方法可以被使用?

答案解析:

        当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll(0方法通知所有的由于使用这个同步方法而处于等待的线程结束等待 。

【简答5】编程题:

编写一个Java应用程序,在主线程中再创建3个线程:“运货司机”、“装运工”和“仓库管理员”。要求线程“运货司机”占有CPU资源后立刻联合线程“装运工”,也就是让“运货司机”—直等到“装运工”完成工作才能开车,而“装运工”占有CPU资源后立刻联合线程“仓库管理员”,也就是让“装运工”—直等到“仓库管理员”打开仓库才能开始搬运货物。

//E.java
public class E{
    public static void main(String args[]){
        ThreadJoin a = new ThreadJoin();
        Thread driver = new Thread(a);
        Thread worker = new Thread(a);
        Thread administrator = new Thread(a);
        driver.setName("货车司机");
        worker.setName("装运工");
        administrator.setName("仓库管理员");
        a.setThread(driver,worker,administrator);
        driver.start();
    }
}
//ClassRoom.java
public class ThreadJoin implements Runnable {
    Thread driver,worker,administrator;
    public void setThread(Thread ...t){
        driver=t[0];
        worker=t[1];
        administrator=t[2];
    }
public void run() {
    if(Thread.currentThread()==driver) {
    System.out.printIn(driver.getName()+"等待"+worker.getName()+"搬运货物");
    try{ 
        worker.start();
        worker.join();//当前线程开始等待worker结束
    } catch(InterruptedException e){
        System.out.printIn(driver.getName()+"启动车辆,拉着货物离开了");
    }
    else if(Thread.currentThread()==worker) {
        System.out.printIn(worker.getName()+"等待"+administrator.getName()+"打开仓库门");
    try{ 
        administrator.start();
        administrator.join();//当前线程开始等待administrator结束
    }catch(InterruptedException e){}
    System.out.println(worker.getName()+"给车辆装载货物完毕");
    }
    else if(Thread.currentThread()==administrator) {
        System.out.printIn(administrator.getName()+"开始打开货仓的门,请稍等...");
    try { 
        Thread.sleep(2000);
    }
    catch(InterruptedException e){}
    System.out.printIn(administrator.getName()+"打开了货仓门。");
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值