概述

  多线程的创建常用的有两种方法:1). 继承 Thread 类; 2). 实现 Runnable 接口; 3). 实现 Callable 接口。

继承 Thread 类】  

/**
* 1. 继承 Thread 类, 并重写 run() 方法
* 2. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
new ThreadClass().start();
new ThreadClass().start();
}
} class ThreadClass extends Thread {
     @Override
public void run(){
System.out.println(Thread.currentThread().getName());
}
}

实现 Runnable 接口

/**
* 1. 实现 Runnable 接口, 并重写 run() 方法
* 2. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
ThreadClass obj = new ThreadClass();
new Thread(obj).start();
new Thread(obj).start();
}
} class ThreadClass implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}

实现 Callable 接口

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask; /**
* 1. 实现 Callable 接口, 并重写 call() 方法
* 2. 创建 FutureTask 对象
* 3. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
ThreadClass obj = new ThreadClass();
FutureTask<Boolean> result = new FutureTask<Boolean>(obj);
new Thread(result).start();
}
} class ThreadClass implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
return true;
}
}

区别

  1. Java 对于类是单继承,继承 Thread 类会导致该类无法继承其他类,若一个子类需要实现多线程,则不适合使用继承 Thread 类的线程实现方式;Java 对于接口是多继承, 实现 Runnable 接口的方式可以解决子类实现多线程的问题。

  2. 实现 Runnable 接口的方式的可以共享实例数据,即多个不同的线程执行是同一实例的 run() 方法,  而继承 Thread 类不可以共享实例变量,多个不同线程执行的是不同实例的 run() 方法。

  3. 实现 Callable 接口的底层实现也是基于实现 Runnable 接口的 run() 方法,经过封装后可以返回线程执行的结果,可以自定义返回类型。

B1. Concurrent 多线程的创建的更多相关文章

  1. iOS开发多线程篇—创建线程

    iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] in ...

  2. Win32 多线程的创建方法和基本使用

    Win32多线程的创建方法主要有: (1)CreateThread() (2)_beginthread()&&_beginthreadex() (3)AfxBeginThread() ...

  3. Python多线程的创建,相关函数和守护线程的理解

    一:多线程的创建 threading库创建线程有两种方式,函数式和继承式    1)函数式 def func(): print 'Starting' print 'Ending' t=threadin ...

  4. Java多线程(1) 创建

    一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下以下这张较为经典的图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threa ...

  5. 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解

    不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...

  6. java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)

    今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1): 1.什么是线程以及多线程与进程的区别 2.多线程的创建与启动 3.中断线程和守护线程以及 ...

  7. Java多线程的创建(一)

    方法一:继承Thread类实现 1.创建一个类A,并继承Thread类 2.重写A的run()方法 3.创建A的实例对象b,即创建了线程对象 4.使用b调用start()方法:启动线程(会自动调用ru ...

  8. shell脚本(多线程批量创建用户)

    shell脚本中的多线程 很多场景中会用到多线程,例如备份数据库,有100个库,正常备份效率极其低下.有了多线程原本可能需要10个小时备份,现在分10个线程同时去干,只要一个小时就解决了.今天就介绍下 ...

  9. Day 12_61_多线程的创建和启动(二)

    多线程的创建和启动 * 在java中实现多线程的第二种方法 实现java.lang.Runnable接口,重写run()方法 * 推荐使用这种方式,因为实现接口还可以保留类的继承. package c ...

随机推荐

  1. BZOJ1854:游戏(二分图匹配)

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...

  2. str函数isdigit、isdecimal、isnumeric的区别

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  3. coderfoces446c (斐波那契数列)

    题目描述: 区间增值,但是每一项增加的值为Fi - l + 1,F[i]为斐波那契数列,求区间和? 考虑线段树,刚开始想用斐波那契数列的前n项和,可是推不出来,考虑到每个区间的增值序列都是一段斐波那契 ...

  4. css模型

    外边距: margin:1px 2px 3px 4px; 上     右     下     左 内边距: padding:1px 2px 3px 4px; 上     右     下     左 边 ...

  5. centos6中office及中文输入法安装 (转载)

           原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xuxuezhe.blog.51cto.com/1636138/73 ...

  6. bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛【Floyd】

    floyd传递关系,一个牛能确定排名的条件是能和所有牛确定关系 #include<iostream> #include<cstdio> using namespace std; ...

  7. RT-Thread 设备驱动ADC浅析与改进

    OS版本:RT-Thread 4.0.0 芯片:STM32F407 下面时官方ADC提供的参考访问接口 访问 ADC 设备 应用程序通过 RT-Thread 提供的 ADC 设备管理接口来访问 ADC ...

  8. Windows API函数大全

    WindowsAPI函数大全(精心总结) 目录 1. API之网络函数... 1 2. API之消息函数... 1 3. API之文件处理函数... 2 4. API之打印函数... 5 5. API ...

  9. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...

  10. ACM牛人博客

    ACM牛人博客 kuangbin kuangbin(新) wuyiqi wuyiqi(新) ACM!荣耀之路! 九野的博客 传说中的ACM大牛!!! read more