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可以保证原子性,可见性、有序性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程基本知识 什么是线程安全性?当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么可以认为这个类是线程安...
    Cheava阅读 4,638评论 0 1
  • Java知识点系统复习 为什么要使用base64编码,有哪些情景需求? 为什么要使用base64编码?   我们知...
    抄无止境阅读 3,408评论 0 2
  • Java知识点1、==和equals的区别基本类型比较==比较内容 equals比较地址值引用类型比较==比较地址...
    压抑的内心阅读 3,688评论 0 0
  • 35. 并行(parallellism )和并发(concurrency)有什么区别? 并行:同一时刻有多条指令在...
    CgySHFF阅读 3,118评论 0 0
  • 1、什么是线程? 1)线程是轻量级的进程 2)线程没有独立的地址空间(内存空间) 3)线程由进程创建(寄生在进程)...
    夏与清风阅读 8,362评论 0 1