-
如何在Java中实现线程?
- 可以继承 java.lang.Thread 类,该类的实例就是一个线程(本身就是调用的Runnable接口),重写run()方法。
- 直接调用Runnable接口来重写run()方法实现线程。
- 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象。使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
-
用Runnable还是Thread?
- Java不支持类的多重继承,但允许调用多个接口。所以如果要继承其他类,当然是调用Runnable接口好 了。
Thread(Runnable threadOb,String threadName);
当需要多个线程操作同一个对象时,把要操作的数据封装入Runnable的实现类中,然后将Runnable实例传入多个Thread对象中,就可以实现一个对象数据在多个线程的共享。
-
Java中Runnable和Callable有什么不同?
Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在 JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。
-
Java内存模型
Java内存模型控制线程间的通信,保证线程之间的可见性。。定义了一些规则,happens-before,volatile等。
-
什么是线程安全?
如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
【参考文档】
ava多线程面试题整理及答案(2018年)