什么是java线程_Java多线程是什么意思?
展开全部
Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多636f70793231313335323631343130323136353331333363373731线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
在合适的地方启动线程如下:
2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
3、使用ExecutorService、Callable、Future实现有返回结果的多线程
ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。代码如下:
代码说明:
上述代码中Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
public static ExecutorService newFixedThreadPool(int nThreads)
创建固定数目线程的线程池。
public static ExecutorService newCachedThreadPool()
创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
public static ExecutorService newSingleThreadExecutor()
创建一个单线程化的Executor。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。
总结:ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future。如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。
什么是java线程_Java多线程是什么意思?相关推荐
- java线程池多线程优先级_Java线程优先级
java线程池多线程优先级 Priority of a thread describes how early it gets execution and selected by the thread ...
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了.如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的.如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行 ...
- java终端线程_java多线程-中断线程
大纲: java线程的中断原则 中断相关方法 中断实例 一.java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志. 二.相关方法 ...
- java线程wait_java多线程学习(四) 之 wait和notify
ynchronized让线程之间互斥,但是有时候因为业务逻辑,需要主动释放锁,让其它的线程执行,这就需要线程之间通信,我们知道JAVA里每个对象都有个隐式锁,JAVA为每个对象都提供了wait和not ...
- auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态
一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process).一个程序进入内存运行,即变成一 ...
- java丐帮_java多线程学习笔记(四)
上一节讲到Synchronized关键字,synchronized上锁的区域:对象锁=方法锁/类锁 本节补充介绍一下synchronized锁重入: 关键字synchronized拥有锁重入的功能,也 ...
- java进程与线程_Java多线程笔记(零):进程、线程与通用概念
前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...
- java 线程强制停止线程_java多线程之停止线程
在多线程开发中停止线程是非常重要的技术点. 停止线程在Java语言中并不像break语句那样干脆.须要一些技巧性的处理. 一. 异常法 採用异常法来停止一个线程.首先我们须要了解一下两个方法的使用方 ...
- 简述java的线程_Java多线程的简述
线程与进程 进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进 ...
最新文章
- final 140字评论II
- Zuul spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL解决方案
- oracle让索引失效命令,Oracle中查询时候使index索引失效的限制条件
- 如何将图片一键重命名按顺序_如何“智慧”地管理文件?(一次付出,终身受益)...
- vbScript: 编号成生不夠位數前面加零
- idea学生授权申请
- 没有钱的苦恼与无奈:七个城市的1000元生活(转载)
- dw2xls已升级至pb11.5
- 婚恋职场人格-张晓文-武汉理工大学-中国MOOC-亲密关系测试题参考答案
- w3school离线文档分享。
- 计算机考研408每日一题 day157
- Mixly 二次开发 自定义库 OLED
- 实验室gpu服务器集群 使用方法探索
- ue4创建c++类编译失败
- 啊?你还在用vmware,快来试试免费好用的Hyper V吧!
- 房屋安全鉴定现场检测主要检测哪些内容
- vue中使用bootstrap4踩坑之旅
- 在VS Code中开启gdb的pretty-printer功能
- 随机产生10个整数;设计一个算法找其中的最大的元素和最小的元素,并统计元素之间的比较次数
- Port 8082 is already in use端口被占用问题