一、runnable接口和callable接口有什么区别
-
runnable接口的run方法没有返回值,没有参数,不抛出异常
-
Callable接口的call方法有返回值,没有参数,抛出编译时异常
二、同步和异步有什么区别
- 同步就是不允许多线程同时执行同一段代码,就是串行执行
- 异步就是允许多线程同时执行同一段代码,就是并行执行
三、sleep和wait的区别
-
Sleep和wait都使得线程处于阻塞状态
-
Sleep方法在阻塞期间不释放锁对象
-
Wait方法在阻塞期间释放锁对象
四、直接调用run和直接调用start的区别
- 直接调用run方法没有启动线程,是在原来的线程中调用了run方法
- 直接调用start方法是启动新线程,在start方法内调用了run方法
五、线程池的submit方法和execute方法的区别
(1)执行的任务不同:
Execute只能执行Runnable任务
Submit可以执行Runnable任务和Callable任务
(2)返回值不同:
Execute没有返回值
submit有返回值Future
(3)所属的接口不同
Execute是Executor接口的方法
Submit是ExecutorService接口的方法
(4)异常处理不同
Execute方法不能抛出异常
Submit方法能抛出异常
六、volatile和synchronized的区别
1、volatile是变量修饰符,而synchronized则作用于一段代码或方法。
2、volatile只是在工作内存和主内存间同步某个变量的值;而synchronized通过锁定和解锁某个监视器同步所有变量的值, 显然synchronized要比volatile消耗更多资源。
3、volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
4、volatile保证数据的可见性、有序性,不保证原子性;synchronized可以保证原子性,可见性、有序性。
【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】
© 版权声明
部分内容为互联网分享,若有侵权请联系站长删除。
THE END
暂无评论内容