A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.多线程的实现有几种方式?实现步骤分别是怎样的?
两种;第一种继承类 :1.定义一个类 extends Thread ,并重写run()方法;
                   2.run()方法内编写线程任务代码
                   3.在主线程main方法内创建该类对象
                   4.使用对象名称调用start方法启动线程;
      第二种实现类:1.定义一个实现类 implement Runnable ,并重写run()方法
                   2. run方法内编写线程任务代码
                   3.在主线程main方法内创建该实现类的对象
                   4.创建 new Thread 对象接收 该类对象(该对象引用才是线程任务对象)
                   5.使用 new Thread 对象名调用start方法
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
区别:Runnable 创建的对象还需要创建 Thread对象接收成为线程任务;
优势体现:1) 避免了,Java的单继承的局限性
            2) 实现了代码的解耦,可以将线程任务与线程对象进行分离,可以让多个线程对象执行同一个线程任务
           3) 让我们做一些共享数据的操作的前提条件
3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
产生:共享一个线程任务的时候,涉及到多个线程操作(修改、写的操作)一个全局的或者静态的资源数据的时候
    会发生,数据不符合预期,数据错误。
解决方式:1)同步代码块
         2)同步方法
         3)lock方法
4.sleep()方法和wait()方法的区别?
sleep()方法 : 只是让线程以定义的毫秒值的时间段暂停运行,并且不释放同步锁
wait()方法 :  在调用wait方法时,意味着该线程时无线等待状态,想要恢复需要其他线程调用notify方法唤醒,
              唤醒还需要再次争抢同步锁;且会释放同步锁
5.线程有几种状态?他们之间是如何转化的?
有六种状态;
创建new:调用stars方法
运行状态:多线程情况下,有同步锁的情况下,保持运行状态
锁阻塞状态:多线程抢夺一个同步锁时,没有抢到的线程,处于阻塞状态
无线等待状态:持有同步锁,但是被wait方法催眠了,处于无线等待状态,该状态需要另一个线程执行唤醒(notify)动作
计时等待状态: 只暂停一段时间后自动运行的,一般使用sleep方法
终止状态:所有线程停止
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马