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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© AllenIverson 中级黑马   /  2015-7-25 10:39  /  484 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 AllenIverson 于 2015-7-25 19:19 编辑

多线程
三种多选实现方案
1.      继承Thread类,重写run()方法。  
2.      实现Runnable接口,new Thread(new Runnable(){…}){…};  
3.      实现Callable接口。和线程池结合。
实现Runnable接口的好处
1.       将线程的任务从线程的子类中分离出来,进行了单独的封装,实现数据和程序分离,按照面向对象的思想将任务封装成对象。  
2.       避免了Java单继承的局限性。所以,创建线程的第二种方式较为常用。
线程间的通信
1.      多个线程在处理同一资源,但是任务却不同,这时候就需要线程间通信。  
2.      等待/唤醒机制涉及的方法  
1)      wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。  
2)      notify():唤醒线程池中的一个线程(任何一个都有可能)。  
3)      notifyAll():唤醒线程池中的所有线程。
wait,sleep区别
1.       wait可以指定时间也可以不指定。sleep必须指定时间。  
2.       在同步中时,对CPU的执行权和锁的处理不同。  
         wait:释放执行权,释放锁。Object中的方法。  
         sleep:释放执行权,不释放锁。Thread中的方法。
常用方法
1.      String  getName(),void setName(String name)  
2.      static  Thread currentThread()  
3.      int  getPriority():获取线程优先级  
4.      void  setPriority(int newPriority):设置线程优先级  
5.      static  void sleep(long millis):线程休眠  
6.      void  join():线程加入,static void yield():线程礼让  
7.      setDaemon(boolean  on):后台线程/守护线程  
8.      void  stop( ),interrupt( ):中断线程
线程的生命周期
新建,就绪,运行,阻塞(同步阻塞,等待阻塞,其他阻塞),死亡

    多线程面试题
一、多线程有几种实现方案,分别是哪几种?
(1)  三种。
(2)  继承Thread类,重写run()方法
(3)  实现Runnable接口,new Thread(new Runnable(){…}){…};
(4)  实现Callable接口。和线程池结合。

二、创建线程方式二:实现Runnable接口
(1)定义类实现Runnable接口。
(2)覆盖接口中的run方法,将线程的任务代码封装到run方法中。
(3)通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
    为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。所以要在线程对象创建时就必须明确要运行的任务。
(4)调用线程对象的start方法开启线程。
三、实现Runnable接口的好处:
1.将线程的任务从线程的子类中分离出来,进行了单独的封装,按照面向对象的思想将任务封装成对象。
2.避免了Java单继承的局限性。所以,创建线程的第二种方式较为常用。

四、同步有几种方式,分别是什么?
同步代码块: synchronized(对象) { 需要被同步的代码;}
同步方法: 把同步关键字synchronized加到方法上,锁对象是this

五、启动一个线程是run()还是start()?它们的区别?
    start();
    run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用
    start():启动线程,并由JVM自动调用run()方法

六、sleep()和wait()方法的区别
    sleep():必须指时间;不释放锁。
    wait():可以不指定时间,也可以指定时间;释放锁。

七、为什么wait(),notify(),notifyAll()等方法都定义在Object类中
    因为这些方法的调用是依赖于锁对象的,而同步代码块的锁对象是任意锁。
    而Object代码任意的对象,所以,定义在这里面。

八、线程的生命周期图
    新建 -- 就绪 -- 运行 -- 死亡
    新建 -- 就绪 -- 运行 -- 阻塞 -- 就绪 -- 运行 -- 死亡
    建议:画图解释。

1 个回复

倒序浏览
楼主太给力了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马