首页 > 社交 > 科普中国

java面试题整理《多线程篇》七

常驻编辑 科普中国 2022-08-16 重写   手把手   线程   放入   实例   接口   对象   状态   代码   方法

Thread、Runable和Callable 三者区别?
Thread 是一个抽象类,只能被继承,而 Runable、Callable 是接口,需要实现接口中的方法。继承 Thread 重写run()方法,实现Runable接口需要实现run()方法,而Callable是需要实现call()方法。
Thread 和 Runable 没有返回值,Callable 有返回值,返回值可以被 Future 拿到。
实现 Runable 接口的类不能直接调用start()方法,需要 new 一个 Thread 并发该实现类放入 Thread,再通过新建的 Thread 实例来调用start()方法。实现 Callable 接口的类需要借助 FutureTask (将该实现类放入其中),再将 FutureTask 实例放入 Thread,再通过新建的 Thread 实例来调用start()方法。获取返回值只需要借助 FutureTask 实例调用get()方法即可!
什么是 FutureTask?
FutureTask 表示一个异步运算的任务。FutureTask 里面可以传入一个Callable 的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。只有当运算完成的时候结果才能取回,如果运算尚未完成 get 方法将会阻塞。一个 FutureTask 对象可以对调用了 Callable 和 Runnable 的对象进行包装,由于 FutureTask 也是Runnable 接口的实现类,所以 FutureTask 也可以放入线程池中。igl拜客生活常识网

线程的 run()和 start()有什么区别?
通过调用 Thread 类的 start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。这时无需等待 run 方法体代码执行完毕,可以直接继续执行下面的代码。igl拜客生活常识网

方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了运行状态,开始运行 run 函数当中的代码。 run 方法运行结束, 此线程终止。然后 CPU 再调度其它线程。igl拜客生活常识网

run() 可以重复调用,而 start()只能调用一次。igl拜客生活常识网

为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用run() 方法?igl拜客生活常识网

如果直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。调用 start 方法方可启动线程并使线程进入就绪状态,而 run 方法只是 thread 的一个普通方法调用,还是在主线程里执行。igl拜客生活常识网

尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibiliigl拜客生活常识网

相关阅读:

  • Apache下的.htaccess
  • 动手写一个模板方法模式(Java版)
  • 你今天微笑了吗
  • 看这象形字,娃太有才了,家长怎么会被气得暴跳如雷呢
  • Shiro去掉登录时url里的JSESSIONID,允许分号
  • 简单好吃不翻车!来,“朝阳群众”手把手教您做宫保鸡丁
  • 大樱桃红了 快递小哥手把手教“新手”果农发快递
  • 读书 | 建筑师手把手教你如何让小家作弊式变大?
  • 手把手教您认“养生穴”,按对了,强身健体
  • 二十四节气|大暑时节,“瓜王”手把手教您挑西瓜!
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。