Java中线程的创建有四i种方式:

1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中

2.  通过实现Runnable接口,实例化Thread类

3、应用程序可以使用Executor框架来创建线程池

4、实现Callable接口

一、通过继承Thread类实现多线程

class MyThread extends Thread{
String name = null;
int ticket = 0;
public MyThread(String name){
this.name = name;
}
public synchronized void run(){
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+this.name+" ticket:"+ticket++);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}

实现方式:

public class TestThread {

   public static void main(String args[]) {
MyThread mThread1 = new MyThread("线程一");
MyThread mThread2 = new MyThread("线程二");
MyThread mThread3 = new MyThread("线程三");
mThread1.start();
mThread2.start();
mThread3.start();
}
}

输出结果:

Thread-0线程一 ticket:0
Thread-1线程二 ticket:0
Thread-2线程三 ticket:0
Thread-2线程三 ticket:1
Thread-1线程二 ticket:1
Thread-0线程一 ticket:1
Thread-2线程三 ticket:2
Thread-0线程一 ticket:2
Thread-1线程二 ticket:2
Thread-2线程三 ticket:3
Thread-0线程一 ticket:3
Thread-1线程二 ticket:3
Thread-2线程三 ticket:4
Thread-0线程一 ticket:4
Thread-1线程二 ticket:4

二、通过继承Runnable接口实现多线程

class RunThread implements Runnable{

    int Counter = 0;
@Override
public synchronized void run() {
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"count:"+Counter++);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

实现方式:

public class TestRunnable  {

       public static void main(String args[]) {
RunThread rThread = new RunThread();
Thread t1 = new Thread(rThread,"线程一");
Thread t2 = new Thread(rThread,"线程二");
Thread t3 = new Thread(rThread,"线程三");
t1.start();
t2.start();
t3.start();
}
}

输出结果:

线程一count:0
线程一count:1
线程一count:2
线程一count:3
线程一count:4
线程二count:5
线程二count:6
线程二count:7
线程二count:8
线程二count:9
线程三count:10
线程三count:11
线程三count:12
线程三count:13
线程三count:14

三、总结

实现Runnable接口相对于继承Thread类来说,有以下显著优势:

(1)适合多个相同程序代码的线程去处理同一资源的情况(资源共享)

(2)可以避免由于Java的单继承特性带来的局限,一个类可以继承多个接口

(3)挣钱了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

Java创建线程的方式的更多相关文章

  1. Java 创建线程的方式

    想必大家在Java面试中经常会被问到有关线程的问题,最常见的莫过于“Java有哪几种创建线程的方式呢?” 稍稍了解过,或者在日常开发中也都会用到以下几种方式: ①继承Thread类(真正意义上的线程类 ...

  2. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  3. Java多线程学习总结--线程概述及创建线程的方式(1)

    在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...

  4. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  5. 操作系统实现线程的几种模式 和 java创建线程的3个方式

    操作系统实现线程的几种模式 和 java创建线程的3个方式  这是两个概念 在操作系统中,线程可以实现在用户模式下,也可以实现在内核模式下,也可以两者结合实现. 1.实现线程的三种方式: (1)继承t ...

  6. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  7. Java创建线程的三种主要方式

    Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...

  8. java线程(1)——三种创建线程的方式

    前言 线程,英文Thread.在java中,创建线程的方式有三种: 1.Thread 2.Runnable 3.Callable 在详细介绍下这几种方式之前,我们先来看下Thread类和Runnabl ...

  9. java线程——三种创建线程的方式

    前言 线程,英文Thread.在java中,创建线程的方式有三种: 1.Thread 2.Runnable 3.Callable 在详细介绍下这几种方式之前,我们先来看下Thread类和Runnabl ...

随机推荐

  1. tp5--路由的使用方法(深入)

    懒得写注释,直接上代码 配置文件Route: <?php use think\Route; //tp5路由测试 //动态注册 //Route::rule('路由表达式','路由地址','请求类型 ...

  2. 解决QQ可以登录但是网页打不卡 ,提示代理服务器拒绝连接 的问题。

  3. Zabbix备份数据文件

    mysql自带的工具mysqldump,当数据量大了之后进行全备所花的时间比较长,这样将会造成数据库的锁读.从而zabbix服务的监控告警不断,想着做下配置文件的备份.刚好有这么个脚本.满足了需求. ...

  4. 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约

    文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...

  5. js 函数的多图片预加载(preload) 带插件版完整解析

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS实现图片预加载效果 本篇文章写的 ...

  6. Linux发送邮件命令mail,mutt

    邮件常常是Linux下监控报警手段之一.Linux下的mail命令可以方便,快速的完成发送邮件. 1. Linux发邮件2种常见客户端命令 1.1 mail命令(推荐) 语法: 无邮件正文 mail ...

  7. 【Linux常见命令】rm命令

    rm - remove files or directories rm命令用于删除一个文件或者目录. 语法: rm [OPTION]... FILE... 参数: -f 强制删除文件 -r 递归,用于 ...

  8. centos分配IP脚本--写的第一个shell脚本

    IDC小菜鸟一枚,非科班出身.常常有客户的centos服务器需要分配15个IP甚至30个IP.每次需要手动分配十分麻烦,于是花了一天时间学了shell脚本,写了这个脚本. #!/bin/bash re ...

  9. webpack4.x开发环境配置

    写这篇文章的初衷在于,虽然网络上关于webpack的教程不少,但是大多已经过时,由于webpack版本更新后许多操作变化很大,很多教程的经验已经不适合.当我们使用npm安装webpack时,若不指定w ...

  10. Algorithm Exercises

    汇总一些常见的算法题目,参考代码. 注:部分题目没有合适的oj地址 枚举 Perfect Cubes.Biorhythms.Counterfeit Dollar.EXTENDED LIGHTS OUT ...