对java多线程的理解

进程 线程 程序:
程序是一系列代码的集合,计算机可以理解并执行。
进程是程序进入内存并且开始执行。
线程是进程的一部分,一个进程可以有多个线程。
进程的特点:
(1):独立性
(2):动态性
(3):并发性
并发和并行的区别:
并行:同一时刻,多条指令在多个处理器上运行
并发:同一时刻,多条指令在一个处理器上运行,实际是指多条指令被快速轮换执行,使得在宏观上好像多条指令一起执行一样。
下面是java多线程的三种实现方式:
1:继承Thread类
2:实现Runnable 接口
3:使用Callable接口和 Future接口
前面两种是最常用的,在这里就不阐述了,重点说一下第三种方法,也是对java基础的一种巩固和复习。
java5之后,提供了Callable来实现多线程。相应的方法从run()变成了Call()方法,在运行的时候实际上是调用的Call()方法来实现的多线程。Call()方法比run()方法更加强大,主要是两点:
1:Call方法有返回值,但Run方法没有返回值
2:Call方法可以声明并抛出异常,但是Run方法不能抛出异常,它的方法体内如果需要处理异常只能就地解决
那么Future接口是干嘛用的呢?它其实就是用来接受Call方法的返回值的。它有一个实现类FutureTask ,这个类很强,它既实现了Future接口,又实现了Runnable接口,因此,它将Callable接口和Runnable接口联系了起来,并且可以作为Runnable接口的实例对象来充当Thread的Target 从而实现多线程。下边是一个代码实现的例子:

FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)->{
	return 10;  //这里是Call()方法的实现
})
new Thread(task).start()   //这样就可以启动线程了

上边的例子其实综合性很强,它不仅涉及到了java多线程 Thread类 Runnable接口 Callable接口 Future接口 FutureTask类方面的相关知识,而且还涉及到了java泛型编程,匿名内部类以及Lambda表达式的一些使用,如果你对这些都很熟悉,那么看懂它应该就不成什么问题了。
说了这么多,其实想表达的意思就是一个,Callable接口是增强版的Runnable接口,它支持返回值和声明抛出异常。FutureTask可以接受它的返回值并且和Thread联系起来实现多线程。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务