java线程方法_Java线程的三种方式
创建线程有三种方式:
1.继承Thread类
2.实现Runnable接口
3.使用Callable和Future创建线程
三种方式详解如下:
---------------------------------------------------------------------------
1.继承Thread类创建线程类
(1).重写run()方法,run()方法即是线程的执行体
(2).实例化线程类
(3).调用start()方法,启动线程
代码示例:
public class MyThread extendsThread {int i = 0;public voidrun() {for(; i <= 50;i++) {
System.out.println(getName()+i);
}
}public static voidmain(String args[]) {for(int i=0;i <= 50;i++) {if(i == 10) {
MyThread myThread= newMyThread();
myThread.start();
}
}
}
}
2.创建实现Runnable接口的线程类:
(1)重写run()方法,run()方法是线程的执行体
(2)创建线程类的实例,并以该实例为对象创建Thread类的实例,Thread类对象才是真正的线程对象
(3)通过Thread对象调用start()方法,启动线程
代码示例:
public class MyRunnable implementsRunnable {private inti;
@Overridepublic voidrun() {//TODO Auto-generated method stub
for(int i=0; i<=50;i++) {
System.out.println(Thread.currentThread().getName()+i);
}
}public static voidmain(String args[]) {
MyRunnable myRunnable= newMyRunnable();
Thread thread= new Thread(myRunnable, "new Thread");
thread.start();
}
}
3.通过Callable和Future创建线程:
(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值
(3)使用FutureTask对象作为Thread对象的参数创建并启动新线程
(4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
代码示例:
importjava.util.concurrent.Callable;importjava.util.concurrent.FutureTask;public class CallableThread implements Callable{
@Overridepublic Integer call() throwsException {//TODO Auto-generated method stub
int i = 0;for(;i<=50;i++) {
System.out.println(Thread.currentThread().getName()+i);
}returni;
}public static voidmain(String args[]) {
CallableThread ct= newCallableThread();
FutureTask ft = new FutureTask<>(ct);for(int i=0;i <= 50;i++) {new Thread(ft,"返回线程").start();
}try{
System.out.println("线程的返回值:" +ft.get());
}catch(Exception e) {//TODO: handle exception
e.printStackTrace();
}
}
}
通过以上的代码实例,我们可以看到:
基于Runnablehe和Callable接口实现的线程类比较灵活,可继承其他类,适合多个线程处理同一个资源的情况,但与此同时代码较复杂,访问当前线程时要使用Thread.currentThread()方法。
而继承Thread实现的线程类在访问当前线程时只使用this即可访问,但因为继承了Thread类,不能再继承其他类
java线程方法_Java线程的三种方式相关推荐
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- Java生成唯一标识码的三种方式
Java生成唯一标识码的三种方式 前言 我们经常会遇到这样的场景,需要生成一个唯一的序列号来表明某一个数据的唯一性,在单节点的应用中我们可以简单地使用一个自增的整型来实现实现,但是在分布式情况下这个方 ...
- java的如何创建js_[Java教程]JS创建事件的三种方式(实例)
[Java教程]JS创建事件的三种方式(实例) 0 2016-05-11 14:00:16 1.普通的定义方式 οnclick="Sfont=prompt('请在文本框中输入红色','红色' ...
- java多线程w3c_Java创建多线程的三种方式
前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...
- mysql安装方法_MySQL安装的三种方式
MySQL安装的三种方式 Mysql安装方式对比 安装方式 安装简易度 使用简易度 定制化程度 适合范围 rpm包安装 简单 简单 低 仅适合redhat/centos系列linux 二进制安装 安装 ...
- java初始化二维数组的三种方式
//第一种方式:int a[][]={{1,2,3},{4,5,6}};//第二种方式:int[][] ints = new int[4][2];ints[i][j] =__; //分别赋值//第三种 ...
- java中打印输出数组内容的三种方式
今天输出数组遇到问题,学习一下打印输出数组内容的几种方式 错误示范:System.out.println(array); //这样输出的是数组的首地址,而不能打印出数组数据.(唉,我开始就是这么写的. ...
- 【Java】 数组转 List 的三种方式及对比
本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一. (最高效) 通过集合工具类Collections.addAll()方法,支持增删 ...
- Struts2中XXX.Action类中方法的访问(三种方式)
第一种:使用action标签的method属性(常规方法) Action类: package cn.tedu.web;import org.springframework.context.annota ...
最新文章
- 使用CSS3的appearance属性改变元素的外观
- 基于MATLAB的波速形成仿真
- 金融领域下的数据挖掘算法应用:逻辑回归模型
- java时间比较_广州java培训大概多久时间可以毕业
- SSM中通过Json做前后端分离
- 考研复习安排——第一阶段末
- 冒充“老干妈”公司工作人员行骗三人被提起公诉
- OpenStack对象存储——Swift
- php checkbox表单提交,HTML表单Checkbox的值如何正确提交到PHP后台?,需要技巧
- HTML Text Editor
- HDU 2899 :(二分求最小值)
- Java集合Collection之实现原理解读(ArrayList)
- 辞职信格式模板和范文参考
- 人工智能产品经理及十种AI常用算法
- 对计算机系统进行软件攻击,win10系统预防电脑被系统漏洞攻击的操作方法
- VirtualBox安装Mac OS 10.11——虚拟机安装黑苹果
- 组策略怎么禁用计算机管理,如何有效禁止组策略的运行
- CentOS 7.4 初次手记:第三章 CentOS基础了解
- IoT原型开发利用现成的单板设计---凯利讯半导体
- 五面拿下阿里飞猪offer,java电子书百度云
热门文章
- IBM WebSphere MQ 7.5基本用法
- ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
- oracleI基础入门(1)--背景
- Process类中与内存相关的属相不能更新!
- 二十个CSS经典技巧
- 报告显示:2018年北京人工智能相关产业达1500亿元
- 连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
- wiki多个文件一起导入_wiki.js 使用 postgres 支持中文全文检索
- 050_Unicode字符官方标准一
- 007_JDK的Comparator接口