概述

  多线程的创建常用的有两种方法: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. 实现的是Linux和Windows之间的一种共享--samba

    samba 基本配置及自定义控制 https://www.cnblogs.com/l-hh/p/9473937.html Samba简介: Samba实现的是Linux和Windows之间的一种共享, ...

  2. CocoaPods 升级出现问题 (一)

    升级了cocoapods 然后出现了这个问题 , 一上午时间各种FQ啊 ,终于吃完饭后找到原因了 ,OK 开工

  3. python爬虫之requests+selenium+BeautifulSoup

    前言: 环境配置:windows64.python3.4 requests库基本操作: 1.安装:pip install requests 2.功能:使用 requests 发送网络请求,可以实现跟浏 ...

  4. c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件

    零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:&  变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...

  5. Bootstrap简介及安装使用

    Bootstrap 简介 什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的 ...

  6. 解题报告:hdu 1556 Color the ball(区间修改,单点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N ...

  7. 大小写 unix and windows

    如果你没有使用工具, 只是sqlplus对大小写不敏感. 如果你要给sql传递参数,且在windows下面就不需要考虑.如果是aix系统,最好写一样.

  8. Spring @Resource、@Autowired、@Qualifier区别

    @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualif ...

  9. 在spring boot 中使用itext和itextrender生成pdf文件

    转载请注明出处 https://www.cnblogs.com/majianming/p/9539376.html 项目中需要对订单生成pdf文件,在第一版本其实已经有了比较满意的pdf文档,但是还是 ...

  10. android开发学习——关于activity 和 fragment在toolbar上设置menu菜单

    在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...