zoukankan      html  css  js  c++  java
  • JAVA多线程面试题目

    1,java中有几种方法可以实现一个线程?

    答:在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法。这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。

    常见错误:调用run()方法而非start()方法
    创建并运行一个线程所犯的常见错误是调用线程的run()方法而非start()方法,如下所示:

    Thread newThread = new Thread(MyRunnable());
    newThread.run();

    起初你并不会感觉到有什么不妥,因为run()方法的确如你所愿的被调用了。但是,事实上,run()方法并非是由刚创建的新线程所执行的,而是被创建新线程的当前线程所执行了。也就是被执行上面两行代码的线程所执行的。想要让创建的新线程执行run()方法,必须调用新线程的start方法。

    2,如何停止一个正在运行的线程?

    答:当不阻塞时候设置一个标志位,让代码块正常运行结束并停止线程。

          如果发生了阻塞,用interupt()方法,Thread.interrupt()方法不会中断一个正在运行的线程。

    3,notify()和notifyAll()有什么区别?

    答:1)notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法。
          2)void notify(): 唤醒一个正在等待该对象的线程。
          3)void notifyAll(): 唤醒所有正在等待该对象的线程。
    两者的最大区别在于:
    notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
    notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运 行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的 通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。

  • 相关阅读:
    理解cookie和session机制
    http协议中connection头的作用
    [转]使用Wireshark来检测一次HTTP连接过程
    http协议学习系列
    xcode清空project list
    How To Use Git Source Control with Xcode in iOS 6
    iOS开发XCODE5 SVN配置 使用办法
    iOS申请证书,Certificates, Identifiers &Profiles 简介
    C#学习单向链表和接口 IList<T>
    halcon学习笔记——(7)HALCON标定后的二维测量
  • 原文地址:https://www.cnblogs.com/pingh/p/3502911.html
Copyright © 2011-2022 走看看