线程的创建两种方式

创建线程有四种方式,今天主要演示的是两种:继承Thread,实现Runable接口

继承Thread创建线程

import lombok.extern.slf4j.Slf4j;@Slf4j
class MyThread extends Thread{private  int count=0;@Overridepublic void run(){for(int i=0;i<10;i++){if(count<10){log.info("{} :counter ={}",this.getName(),count++);}}}}
@Slf4j
public class ThreadTest {public static void main(String[] args) {MyThread m1=new MyThread();MyThread m2=new MyThread();m1.start();m2.start();}
}

测试结果

2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =0
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =0
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =1
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =2
2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =1
2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =2
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =3
2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =3
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =4
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =5
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =6
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =7
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =8
2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =9
2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =4
2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =5
2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =6
2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =7
2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =8
2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =9Process finished with exit code 0

说明

两个线程,各自的变量,交替运行

实现Runable接口创建线程

import lombok.extern.slf4j.Slf4j;@Slf4j
public class RunableTest {public static void main(String[] args) {//内部类寄生于外部类,需要先创建外部类的对象RunableTest test = new RunableTest();MyThread m1 = test.new MyThread();//两个线程共享一个对象Thread t1 = new Thread(m1);Thread t2 = new Thread(m1);t1.start();t2.start();}class MyThread implements Runnable {public int count = 0;@Overridepublic void run() {for (int i = 0; i < 10; i++) {//runable只继承了getClass方法if(count<10){log.info("{} :counter ={}", Thread.currentThread().getName(), count++);}}}}}

测试结果


2019-07-24 14:26:40,722   [Thread-1] INFO  RunableTest  - Thread-1 :counter =1
2019-07-24 14:26:40,722   [Thread-0] INFO  RunableTest  - Thread-0 :counter =0
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =3
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =4
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =5
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =6
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =7
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =8
2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =9
2019-07-24 14:26:40,737   [Thread-1] INFO  RunableTest  - Thread-1 :counter =2Process finished with exit code 0

说明

两个线程,共享一个对象,交替运行。

转载于:https://www.cnblogs.com/JuncaiF/p/11246823.html

java并发(一):初探线程的创建相关推荐

  1. Java并发学习之一——线程的创建

    与每个java语言中的元素一样,线程是对象.在Java中,我们有两种方式创建线程: 1.通过直接继承thread类,然后覆盖run方法. 2.构建一个实现Runnable接口的类,然后创建一个thre ...

  2. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  3. 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )

    文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...

  4. JAVA并发编程3_线程同步之synchronized关键字

    在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...

  5. [转]Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  6. Java并发基础(六) - 线程池

    Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自<Java并发编程的艺术>: ...

  7. Java并发编程:线程的同步

    <?xml version="1.0" encoding="utf-8"?> Java并发编程:线程的同步 Java并发编程:线程的同步 Table ...

  8. java线程抢占式执行,Java并发基础(一)-线程基础

    原标题:Java并发基础(一)-线程基础 只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的.有很多同学在编写书上的代码时, ...

  9. Java并发编程一线程池简介

    推荐:Java并发编程汇总 Java并发编程一线程池简介 为什么我们需要使用线程池? 我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的 ...

  10. Java并发编程一线程池的五种状态

    推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...

最新文章

  1. 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)
  2. 单链表的建立、排序和翻转
  3. Python基础教程:迭代器
  4. pytorch 构建神经网络模型总结
  5. ORB-SLAM2中四叉树管理特征点
  6. xrkmonitor监控mysql_xrkmonitor字符云监控系统
  7. mysql存储过程批量建表
  8. 王彪20162321 2017-2018程序设计与数据结构-第二学期-第一周学习总结
  9. JavaScript短信验证码60秒倒计时插件
  10. 三极管的基础知识(下)①
  11. iPhone删除的照片能恢复吗?苹果手机照片怎么恢复
  12. 2021年中式面点师(初级)证考试及中式面点师(初级)模拟考试题
  13. 推荐9个值得关注的公众号
  14. C语言:指针三(线性表的存储结构)
  15. net.sf.cglib.beans.BeanCopier用途
  16. Learning VR Photography and Video 学习VR摄影和视频 Lynda课程中文字幕
  17. 技嘉主板命名规则是什么
  18. GFC全球影视区块链技术峰会在河南成功举办
  19. [TensorFlow 填坑之旅]不断更新中...
  20. 软件过程与管理:configuration management

热门文章

  1. rsync实时同步服务部署
  2. siege4安装和使用介绍
  3. eclispe---快捷键设置
  4. 软件的极简主义的三个大敌:配置文件,冗余的参数,和大量复杂的接口。
  5. 目标描述(基于边界的描述)
  6. 一个轻量级javascript框架的设计模式
  7. 在delphi中嵌入腳本語言--(譯)RemObjects Pascal Script使用說明(1)(譯)
  8. spark基础之RDD详解
  9. c# 数组中的空值_2.1.1 聊聊 C# 的版本及特性
  10. (49)FPGA线性单驱动(wire型)