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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

吴佳更
1.两种,Runnable和Thread
Thread直接new一个对象,重写run方法,通过对象名调用start开启双线程。
Runnable通过new一个Runnable对象,把对象作为参数传入Thread再new一个对象,重写run方法,通过对象名调用start开启多线程。
2.
适合多个相同的程序代码的线程去共享同一个资源。
可以避免java中的单继承的局限性。
增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。
线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类
3.使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题
有三种方式,一种同步代码块,一种同步方法。一种lock锁。
4.sleep只能进入Time Waitting状态,而无参的wait能进入waitting状态,只能等notify或notifyAll唤醒。有参的wait也可以进入Time Waitting状态,而sleep和有参的wait也可以等时间到了可以自然醒。
5.6种。new是刚创建的线程并未启动。
            Runnable是可运行状态,可能运行也可能还没运行。
            Waitting是等待状态,通过wait方法进入。可以通过notify或者notifyAll唤醒。
            Time Waitting是时间等待状态,可以通过sleep和有参的wait方法进入。
            Blocked如果一个对象试图获得对象锁,而对象锁有对象持有,这时候就会进入Blocked状态,如果获得锁就会进入Runnable状态
            Teminated因为run方法正常退出而死亡,或者没有捕捉异常终止了run方法而死亡。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马