创建线程有三种方式:

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线程的三种方式相关推荐

  1. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

  2. Java生成唯一标识码的三种方式

    Java生成唯一标识码的三种方式 前言 我们经常会遇到这样的场景,需要生成一个唯一的序列号来表明某一个数据的唯一性,在单节点的应用中我们可以简单地使用一个自增的整型来实现实现,但是在分布式情况下这个方 ...

  3. java的如何创建js_[Java教程]JS创建事件的三种方式(实例)

    [Java教程]JS创建事件的三种方式(实例) 0 2016-05-11 14:00:16 1.普通的定义方式 οnclick="Sfont=prompt('请在文本框中输入红色','红色' ...

  4. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  5. mysql安装方法_MySQL安装的三种方式

    MySQL安装的三种方式 Mysql安装方式对比 安装方式 安装简易度 使用简易度 定制化程度 适合范围 rpm包安装 简单 简单 低 仅适合redhat/centos系列linux 二进制安装 安装 ...

  6. java初始化二维数组的三种方式

    //第一种方式:int a[][]={{1,2,3},{4,5,6}};//第二种方式:int[][] ints = new int[4][2];ints[i][j] =__; //分别赋值//第三种 ...

  7. java中打印输出数组内容的三种方式

    今天输出数组遇到问题,学习一下打印输出数组内容的几种方式 错误示范:System.out.println(array); //这样输出的是数组的首地址,而不能打印出数组数据.(唉,我开始就是这么写的. ...

  8. 【Java】 数组转 List 的三种方式及对比

    本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一. (最高效) 通过集合工具类Collections.addAll()方法,支持增删 ...

  9. Struts2中XXX.Action类中方法的访问(三种方式)

    第一种:使用action标签的method属性(常规方法) Action类: package cn.tedu.web;import org.springframework.context.annota ...

最新文章

  1. 使用CSS3的appearance属性改变元素的外观
  2. 基于MATLAB的波速形成仿真
  3. 金融领域下的数据挖掘算法应用:逻辑回归模型
  4. java时间比较_广州java培训大概多久时间可以毕业
  5. SSM中通过Json做前后端分离
  6. 考研复习安排——第一阶段末
  7. 冒充“老干妈”公司工作人员行骗三人被提起公诉
  8. OpenStack对象存储——Swift
  9. php checkbox表单提交,HTML表单Checkbox的值如何正确提交到PHP后台?,需要技巧
  10. HTML Text Editor
  11. HDU 2899 :(二分求最小值)
  12. Java集合Collection之实现原理解读(ArrayList)
  13. 辞职信格式模板和范文参考
  14. 人工智能产品经理及十种AI常用算法
  15. 对计算机系统进行软件攻击,win10系统预防电脑被系统漏洞攻击的操作方法
  16. VirtualBox安装Mac OS 10.11——虚拟机安装黑苹果
  17. 组策略怎么禁用计算机管理,如何有效禁止组策略的运行
  18. CentOS 7.4 初次手记:第三章 CentOS基础了解
  19. IoT原型开发利用现成的单板设计---凯利讯半导体
  20. 五面拿下阿里飞猪offer,java电子书百度云

热门文章

  1. IBM WebSphere MQ 7.5基本用法
  2. ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
  3. oracleI基础入门(1)--背景
  4. Process类中与内存相关的属相不能更新!
  5. 二十个CSS经典技巧
  6. 报告显示:2018年北京人工智能相关产业达1500亿元
  7. 连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
  8. wiki多个文件一起导入_wiki.js 使用 postgres 支持中文全文检索
  9. 050_Unicode字符官方标准一
  10. 007_JDK的Comparator接口