原文链接:https://blog.csdn.net/ftell/article/details/79353571#1  线程概念

文章目录

  • 1 线程概念
  • 2 创建任务和线程
  • 3 Thread 类

1 线程概念

Java为创建和运行线程以及锁定资源以防止冲突提供了非常好的支持。你可以在程序中创建额外的线程以执行并发任务。在Java中,每个任务都是Runnable接口的实例,也称为一个runnable对象。一个线程实质上是一个对象,它为任务的执行提供便利。

public class TaskClass implements Runnable {public TaskClass(...) {}// 实现Runnable中的run方法public void run() {// 告诉系统如何运行自定义线程}
}public class Client {public void someMethod() {// 创建TaskClass的实例TaskClass task = new TaskClass(...);// 创建线程Thread thread = new Thread(task);// 启动线程thread.start();}
}

2 创建任务和线程

task类必须实现 Runnable接口,task必须从线程执行。
task是对象,为了创建task,必须首先为task定义一个实现了Runnable接口的类。Runnable接口相当简单,只包含了一个Run方法。

task必须在线程中执行,Thread类含有用于创建线程的构造函数,以及很多用于控制线程的方法,创建task的线程:

Thread thread = new Thread(task);

然后调用start()方法告诉JVM,线程已经可以运行:

thread.start();

JVM 通过调用task的run()方法执行task. 下面的例子,创建3个线程,分别打印’a’ 100 次,打印’b’ 100 次, 以及打印 0 ~ 100 之间的整数:

public class TaskThreadDemo {public static void main(String[] args) {// 创建taskRunnable printA = new PrintChar('a', 100);  // Runnable 改成 PrintChar 也可以Runnable printB = new PrintChar('b', 100);  // Runnable 改成 PrintChar 也可以Runnable print100 = new PrintNum(100);  // Runnable 改成 PrintNum 也可以// 创建线程Thread thread1 = new Thread(printA);Thread thread2 = new Thread(printB);Thread thread3 = new Thread(print100);// 启动线程thread1.start();thread2.start();thread3.start();}
}// 打印指定次数字符的 taskclass PrintChar implements Runnable {private char charToPrint; // The character to printprivate int times; // The number of times to repeat/** Construct a task with a specified character and number of* times to print the character*/public PrintChar(char c, int t) {charToPrint = c;times = t;}@Override /** Override the run() method to tell the system* what task to perform*/public void run() {for (int i = 0; i < times; i++) {System.out.print(charToPrint);}}
}// The task class for printing numbers from 1 to n for a given n
class PrintNum implements Runnable {private int lastNum;/** Construct a task for printing 1, 2, ..., n */public PrintNum(int n) {lastNum = n;}@Override /** Tell the thread how to run */public void run() {for (int i = 1; i <= lastNum; i++) {System.out.print(" " + i);}}
}

3 Thread 类

Thread 类包含了创建线程的构造函数以及控制线程的方法
Thread 类实现接口 Runnable:

                      << interface >>

java.lang.Thread -> java.lang.Runnable

因为Thread实现Runnable,因此可以定义类继承Thread并实现Run方法:

// 自定义thread类
public class CustomThread extends Thread {public CustomThread(...) {}// 重写Runnable里的run方法public void run() {// 告诉系统如何执行这个task}
}// 自定义类
public class Client {public void someMethod() {// 创建一个线程CustomThread thread1 = new CustomThread(...);// 启动线程thread1.start();// 创建另一个线程CustomThread thread2 = new CustomThread(...);// 启动线程thread2.start();}
}

例子:并行和串行

//package chapter01;/*** 并发和单线程执行测试* * @author tengfei.fangtf* @version $Id: ConcurrencyTest.java, v 0.1 2014-7-18 下午10:03:31 tengfei.fangtf Exp $*/
public class newtest {/** 执行次数 */private static final long count = 40000l;public static void main(String[] args) throws InterruptedException {//并发计算concurrency();//单线程计算serial();}private static void concurrency() throws InterruptedException {long start = System.currentTimeMillis();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {int a = 0;for (long i = 0; i < count; i++) {a += 5;}System.out.println(a);}});thread.start(); //启动线程int b = 0;for (long i = 0; i < count; i++) {b--;}thread.join();long time = System.currentTimeMillis() - start;System.out.println("concurrency :" + time + "ms,b=" + b);}private static void serial() {long start = System.currentTimeMillis();int a = 0;for (long i = 0; i < count; i++) {a += 5;}int b = 0;for (long i = 0; i < count; i++) {b--;}long time = System.currentTimeMillis() - start;System.out.println("serial:" + time + "ms,b=" + b + ",a=" + a);}}

并发编程的艺术——chap1相关推荐

  1. java 并发 mobi_Java并发编程的艺术pdf txt mobi下载及读书笔记

    Java并发编程的艺术pdf txt mobi读书笔记 如何解决资源限制的问题:对于软件资源限制,可以考虑使用资源池将资源复用.比如使用连接池将数据库和Socket连接复用,或者在调用对方webser ...

  2. Java并发编程的艺术 记录(一)

    模拟死锁 package com.gjjun.concurrent;/*** 模拟死锁,来源于<Java并发编程的艺术>* @Author gjjun* @Create 2018/8/12 ...

  3. Java并发编程的艺术,解读并发编程的优缺点

    并发编程的优缺点 使用并发的原因 多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升. 在特殊的业务场景下先天的就适合于并发编程. 比如在 ...

  4. 多线程知识梳理(2) - 并发编程的艺术笔记

    layout: post title: <Java并发编程的艺术>笔记 categories: Java excerpt: The Art of Java Concurrency Prog ...

  5. 《Java并发编程的艺术》笔记

    <Java并发编程的艺术>笔记 第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种 ...

  6. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

  7. 并发编程的艺术 读书笔记

    第一章 并发编程的挑战 1. 单核CPU分配运行时间给各个线程,实现多线程执行代码. 举例:看英文书时某个单词不会,先记住看到书的页数和行数,然后去查单词,查完回到看书状态,相当于上下文切换. 2. ...

  8. 《Java 并发编程的艺术》迷你书

    本文源自InfoQ发表的<Java 并发编程的艺术>电子书  作者:方腾飞  序言:张龙 免费下载此迷你书 推荐序 欣闻腾飞兄弟的<聊聊并发>系列文章将要集结成InfoQ迷你书 ...

  9. 【推荐】《Java 并发编程的艺术》迷你书

    本文源自InfoQ发表的<Java 并发编程的艺术>电子书  作者:方腾飞  序言:张龙 免费下载此迷你书 推荐序 欣闻腾飞兄弟的<聊聊并发>系列文章将要集结成InfoQ迷你书 ...

  10. Java并发编程的艺术(一)

    看<java并发编程的艺术>这本书,想着看的时候做个简单的总结,方便以后直接看重点. 一.并发编程的挑战 1.上下文切换 Cpu时间片通过给每个线程分配CPU时间片来实现多线程机制,时间片 ...

最新文章

  1. SQL Server 2008 缩小数据库日志
  2. mac下appium启动
  3. 思科模拟器-虚拟局域网的划分与配置实验
  4. 【完结】AI1000问以后知识星球和B站见啦
  5. html如何让条数按序号输出,JS 怎么控制页面序号较智能的生成?
  6. Springboot 常见请求方式
  7. javascript瀑布流效果
  8. 自旋锁和互斥锁实例_多线程编程之自旋锁
  9. python几个版本的区别-Python的这几个版本不同
  10. 删除Github上项目
  11. HTML5对表单的约束验证
  12. 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
  13. 低通滤波器的设计与DSP实现
  14. LeetCode题解:707.设计链表
  15. 刘宇凡:海子,一个孤独的灵魂诗人
  16. 马云马总,我祝福您全家和以后的子子孙孙都有996福报
  17. 分布式操作系统 - 1.分布式系统概论
  18. [1927-2011][影片][历届奥斯卡最佳影片合集][全82部]
  19. Gateway一文详解
  20. STM32CubeMX快速生成STM32F407ZG芯片寄存器初始化

热门文章

  1. 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
  2. angularjs sill 创建项目_AngularJS快速上手,从安装到运行
  3. 多元统计分析最短距离法_多元统计分析习题及解答.doc
  4. 华为算法精英赛(题1:判断输入天数为当年的第几天)
  5. Twitter数据非API采集方法
  6. carto笔记--- 传感器数据走向
  7. KMP模式匹配的next数组
  8. 人工智能+眼科疾病辅助诊断(相关信息搜集)
  9. 1030 Travel Plan [Dijkstra]
  10. mongo之$group+$addToSet