线程的实现方式
1:Runnable接口
接口中 只有一个run()抽象方法,让继承者重写,当run()被重写后,会被分派一个线程用来独立运行。 Runnable一旦继承与Thread类同级别 可以有Thread类中的所有方法 也可以自定义方法。他更适合在资源共享的情况下,例如 多人抢一口井水喝。
**注:**多人抢在低速轮换下感觉不是同步,但是在高速轮换情况下让观看者认为他们在同时喝水(计算机起到高速轮换的作用)达到并发执行的效果,只是效果,不是正真的同步。同步执行在一台机器有多个处理器,多个处理器同时执行喝水,达到并行执行,相当于有多口井,多人喝。
2:Thread类
Thread 类继承了Runnable接口
1:在Thread类中实现了 Thread的一系列有参无参构造器,用例实例化不同格式的线程
2:实现了yiled()、sleep()、start()等本地方法和interrupt()打断方法,优先级设定setPriority(),setName() ,getName() join()等方法,实现线程的线程让步
3:重写了run()方法
//重写接口Runnable中的 run()方法
@Override
public void run() {//Thread(target....)
if (target != null) {
target.run();
}
}
//如果目标对象不为空就执行run()方法
3:Callable接口
callable 有返回值 是个泛型接口 在其中一个call()方法用来被继承实现线程。他可以抛出异常。在新建的线程中要传入被调用的线程执行对象时需要借助FutureTask任务泛型对象 ,之后向线程对象中传入任务 task
public interface Callable<V> {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}