线程的创建两种方式

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

继承Thread创建线程

import lombok.extern.slf4j.Slf4j;

@Slf4j
class MyThread extends Thread{
private int count=0;
@Override
public 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 =9 Process 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; @Override
public 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 =2 Process finished with exit code 0

说明

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

java并发(一):初探线程的创建的更多相关文章

  1. Java并发编程:线程的创建

    Java并发编程:线程的创建 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...

  2. java并发编程基础——线程的创建

    一.基础概念 1.进程和线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...

  3. Java并发基础:线程的创建

    线程的创建和管理: 1.应用Thread类显式创建.管理线程 2.应用Executor创建并管理线程. 定义任务: 无返回的任务:实现Runnable接口并编写run()方法. 有响应的任务:实现Ca ...

  4. Java并发编程:线程池的使用

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

  5. Java并发编程:线程池的使用(转)

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

  6. Java并发编程:线程控制

    在上一篇文章中(Java并发编程:线程的基本状态)我们介绍了线程状态的 5 种基本状态以及线程的声明周期.这篇文章将深入讲解Java如何对线程进行状态控制,比如:如何将一个线程从一个状态转到另一个状态 ...

  7. Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  8. Java并发编程:线程池的使用(转载)

    转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...

  9. Java并发编程:线程池的使用(转载)

    文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...

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

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

随机推荐

  1. 3_5 生成元(UVa1583)

    如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1<=n<=100000),求最小生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. 样 ...

  2. 【代码学习】PYHTON 元组

    Python的元组与列表类似,不同之处在于元组的元素不能修改.也可进行分片 和 连接操作. 元组使用小括号,列表使用方括号. 一.访问元组 #coding=utf-8 Tuple = ('name', ...

  3. HDU3172 Virtual Friends

    基础并查集~ #include<cstdio> #include<algorithm> #include<cstring> #include<unordere ...

  4. Kubernetes的控制器之Deployment的定义

    Deploy 的控制器定义参数介绍 [root@master manifests]# kubectl explain deploy KIND: Deployment VERSION: extensio ...

  5. linux--网络管理-ifconfig,route,netstat,ip,ss,dns,主机名网卡名修改bond

    cat /etc/services 查看常见端口对应的服务 查一查某个端口号,是哪个进程在用  lsof  -i :6010 49152-65535:动态端口或私有端口,客户端程序随机使用的端口  其 ...

  6. Algorightm----DynamicProgramming

    参考资料: 1.  告别动态规划,连刷40道动规算法题,我总结了动规的套路

  7. spark脑图

    spark脑图:

  8. linux磁盘空间挂载

    (1)查看磁盘空间 df -hl (3)查看硬盘及分区信息 fdisk -l (4)格式化新分区 mkfs.ext3 /dev/xvdb (5)将磁盘挂载在/www/wwwroot/default目录 ...

  9. 吴裕雄--天生自然TensorFlow2教程:全连接层

    out = f(X@W + b) out = relut(X@W + b) import tensorflow as tf x = tf.random.normal([4, 784]) net = t ...

  10. 什么是Nib文件

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...