• 线程5问?


    1.讲一下线程之间的通信

       a. 把数据设置成线程对象的成员变量

       b. 通过主线程的静态的回调函数

       c. 使用中间方,消息队列 

    2.讲一下线程的五种状态

      大致分为创建、可运行、运行、阻塞、销毁等五个状态。

                            new() 一个线程 : 创建状态

           start() 方法:可运行状态

                             CPU调度,决定当前的对象是否是 运行 OR 阻塞      sleep ( ) 主动进入阻塞

           run( ) 运行完毕 ,自动进入 销毁状态

    其中可运行状态和运行状态可以相互转换,阻塞状态和可运行状态可以相互转换。

    线程进入Runnable状态的情况

    (1)调用sleep()方法后经过的时间超过了指定的休眠时间

    (2)线程调用的阻塞IO已经返回,阻塞方法执行完毕

    (3)线程成功得获得了试图同步的监视器

    (4)线程正在等待某个通知,其他线程发出了通知

    (5)处于挂起状态的线程调用了resume方法恢复线程

    线程出现阻塞状态的情况

    (1)线程调用sleep方法,主动放弃占用的处理器资源

    (2)线程调用了阻塞式IO方法,在方法返回前,该线程被阻塞

    (3)线程试图获得一个同步监视器,但是该同步监视器正被其他线程所持有

    (4)线程等待某个通知

    (5)程序调用了suspend()方法,挂起该线程,此方法容易导致死锁,应该避免调用。

     

    3.讲一下为什么会出现死锁.

      在多个线程(2个以上)的情况下,相互持有对方需要的锁对象,或者循环持有. 等待对方释放,

        解决方案:多线程之间保持相同加锁顺序,尽可能预防出现死锁.

    4.讲一下线程同步机制

     1. 在需要同步的方法的方法签名中加入synchronized关键字。

     2. 使用synchronized块对需要进行同步的代码段进行同步。

     3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。

    注:

    1、对于同步的方法或者代码块来说,必须获得对象锁才能够进入同步方法或者代码块进行操作;


    2、如果采用method级别的同步,则对象锁即为method所在的对象,如果是静态方法,对象锁即指method所在的
    Class对象(唯一);


    3、对于代码块,对象锁即指synchronized(abc)中的abc;


    4、因为第一种情况,对象锁即为每一个线程对象,因此有多个,所以同步失效,第二种共用同一个对象锁lock,因此同步生效,第三个因为是
    static因此对象锁为ThreadTest3的class 对象,因此同步生效。

    如上述正确,则同步有两种方式,同步块和同步方法(为什么没有wait和notify?这个我会在补充章节中做出阐述)

    如果是同步代码块,则对象锁需要编程人员自己指定,一般有些代码为synchronized(this)只有在单态模式才生效;
    (本类的实例有且只有一个)

    如果是同步方法,则分静态和非静态两种 。

    静态方法则一定会同步,非静态方法需在单例模式才生效,推荐用静态方法(不用担心是否单例)。

    LOCK:

    Java提供了同步代码块的另一种机制,它比synchronized关键字更强大也更加灵活。这种机制基于Lock接口及其实现类(例如:ReentrantLock)
    它比synchronized关键字好的地方:
    1、提供了更多的功能。tryLock()方法的实现,这个方法试图获取锁,如果锁已经被其他线程占用,它将返回false并继续往下执行代码。
    2、Lock接口允许分离读和写操作,允许多个线程读和只有一个写线程。ReentrantReadWriteLock
    3、具有更好的性能

    5.讲一下java如何实现多线程。

        a. 继承Thread 对象

     b. 实现runnable()接口

        c.直接使用线程池工具

  • 相关阅读:
    平分糖果——BZOJ 1045
    浙大月赛——ZOJ Problem Set 3574
    jsp 自定义标签的写法
    C#扩展方法(转贴)
    window mobile 防止系统休眠代码
    jbpm sql使用动态参数方法
    spring 多数据源配置实现
    原创jquery蒙版控件
    jbpm 错误解决方法
    cas server 配置
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/11186956.html
Copyright © 2020-2023  润新知