Java中一些相似知识点的区别(2)

一、runnable接口和callable接口有什么区别

  1. runnable接口的run方法没有返回值,没有参数,不抛出异常

  2. Callable接口的call方法有返回值,没有参数,抛出编译时异常

二、同步和异步有什么区别

  1. 同步就是不允许多线程同时执行同一段代码,就是串行执行
  2. 异步就是允许多线程同时执行同一段代码,就是并行执行

三、sleep和wait的区别

  1. Sleep和wait都使得线程处于阻塞状态

  2. Sleep方法在阻塞期间不释放锁对象

  3. Wait方法在阻塞期间释放锁对象

四、直接调用run和直接调用start的区别

  1. 直接调用run方法没有启动线程,是在原来的线程中调用了run方法
  2. 直接调用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
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容