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并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
随机推荐
- DataGrid 獲取 制定 row Col 單元格
public static class DataGridHelper { /// <summary> /// Gets the v ...
- 论文阅读|Focal loss
原文标题:Focal Loss for Dense Object Detection 概要 目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器, ...
- sqlmap注入随笔记录
web7: 首先看见这道题,猜测flag在某页id上面,或者id是可以注入的. 先就是id爆破,用burpsuite抓了包,做了个0~9999的字典爆破id,发现自己猜测错了 那么就还是sql注入题了 ...
- 创建DataTable与DataGridView进行绑定
private DataTable dt = new DataTable(); BindingSource bs = new BindingSource(); /// <summary> ...
- video兼容ie,ckplayer网页播放器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- uniGUI之UniSyntaxEdit(24)
UniSyntaxEdit1语法高亮显示控件,主要属性Language,它是 多行 1]Language 语言 2]执行 FDquery1.Open(UniSyntaxEdit1.Lines.Tex ...
- 计算机基础- 序列化(Serialization)和持久化(Persistence)的区别
参考 https://en.wikipedia.org/wiki/Serialization https://en.wikipedia.org/wiki/Persistence_(computer_s ...
- 操作系统OS - 同步和异步,阻塞和非阻塞
同步和异步关注的是消息通信机制,阻塞/非阻塞是程序在等待调用结果(消息,返回值)时的状态
- 重新理解业务里程碑----HHR计划----以太一堂第二课
---- 理解业务背后的逻辑,抓住创业重点. 第一课:开始学习 1,FA : financial advisor.财务顾问. 2,本节课的目的:抓住创业的重点. 3,预热思考题: (1) 如果把你的整 ...
- 你是否还在写try-catch-finally?来使用try-with-resources优雅地关闭流吧
前言 开发中,我们常常需要在最后进行一些资源的关闭.比如读写文件流等,常见的,我们会在最后的finally里进行资源的关闭.但是这种写法是很不简洁的.其实,早在JDK1.7就已经引入了try-with ...