java并发(一):初探线程的创建
线程的创建两种方式
创建线程有四种方式,今天主要演示的是两种:继承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并发(一):初探线程的创建的更多相关文章
- Java并发编程:线程的创建
Java并发编程:线程的创建 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- java并发编程基础——线程的创建
一.基础概念 1.进程和线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...
- Java并发基础:线程的创建
线程的创建和管理: 1.应用Thread类显式创建.管理线程 2.应用Executor创建并管理线程. 定义任务: 无返回的任务:实现Runnable接口并编写run()方法. 有响应的任务:实现Ca ...
- Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转)
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程控制
在上一篇文章中(Java并发编程:线程的基本状态)我们介绍了线程状态的 5 种基本状态以及线程的声明周期.这篇文章将深入讲解Java如何对线程进行状态控制,比如:如何将一个线程从一个状态转到另一个状态 ...
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
- Java并发编程:线程池的使用(转载)
转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- Java并发编程:线程池的使用(转载)
文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
随机推荐
- 3_5 生成元(UVa1583)
如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1<=n<=100000),求最小生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. 样 ...
- 【代码学习】PYHTON 元组
Python的元组与列表类似,不同之处在于元组的元素不能修改.也可进行分片 和 连接操作. 元组使用小括号,列表使用方括号. 一.访问元组 #coding=utf-8 Tuple = ('name', ...
- HDU3172 Virtual Friends
基础并查集~ #include<cstdio> #include<algorithm> #include<cstring> #include<unordere ...
- Kubernetes的控制器之Deployment的定义
Deploy 的控制器定义参数介绍 [root@master manifests]# kubectl explain deploy KIND: Deployment VERSION: extensio ...
- linux--网络管理-ifconfig,route,netstat,ip,ss,dns,主机名网卡名修改bond
cat /etc/services 查看常见端口对应的服务 查一查某个端口号,是哪个进程在用 lsof -i :6010 49152-65535:动态端口或私有端口,客户端程序随机使用的端口 其 ...
- Algorightm----DynamicProgramming
参考资料: 1. 告别动态规划,连刷40道动规算法题,我总结了动规的套路
- spark脑图
spark脑图:
- linux磁盘空间挂载
(1)查看磁盘空间 df -hl (3)查看硬盘及分区信息 fdisk -l (4)格式化新分区 mkfs.ext3 /dev/xvdb (5)将磁盘挂载在/www/wwwroot/default目录 ...
- 吴裕雄--天生自然TensorFlow2教程:全连接层
out = f(X@W + b) out = relut(X@W + b) import tensorflow as tf x = tf.random.normal([4, 784]) net = t ...
- 什么是Nib文件
Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...