Java多线程机制

您所在的位置:网站首页 java为什么要引入线程机制 Java多线程机制

Java多线程机制

2024-03-24 22:11| 来源: 网络整理| 查看: 265

【简答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()+"打开了货仓门。"); } } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3