Thread

使用新线程的步骤:

  1. 通过覆写 Thread 的 run 方法,配置新线程需要做的事情
  2. 创建新线程对象 new YourThread()
  3. 开启线程 start

创建新线程的方法有很多,下面是一个示例:

class MyThread extends Thread {
@Override
public void run () {
System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
}
}
public class Main {
public static void main (String... args) {
Thread myThread = new MyThread(); // 创建线程
mythread.start(); // 运行线程
}
}

也可以这样:

class MyThread implements Runnable {
@Override
public void run () {
System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
}
}
public class Main {
public static void main (String... args) {
Thread myThread = new Thread(new MyThread()); // 创建线程
mythread.start(); // 运行线程
}
}

上面代码可以简写为:

// 使用匿名内部类进行简化
public class Main {
public static void main (String... args) {
Thread myThread = new Thread () {
@Override
public void run () {
System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
}
};
myThread.start();
}
}

使用 jdk8 的语法,甚至可以简化为:

public class Main {
public static void main (String... args) {
new Thread(() -> System.out.println("task")).start();
}
}

其他:

t.join()
让当前线程阻塞并等待线程 t 结束再执行接下来代码
Thread.sleep()
让当前线程暂时休眠 n 毫秒,这过程不会释放所占用的对象锁
Thread.yield()
暂时退让,优先让其他线程先运行。如果没有线程在这个过程中抢占运行权,则继续运行
Executors 是一个常用的静态类,内置了很多线程池相关的操作。

线程池使用的基本语法:

// 1. 创建线程池
ExecutorService service = Executors.newCachedThreadPool(); // 2. 创建任务
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
}; // 3. 使用线程池调度任务
for (int i = 0; i < 1000; i++) {
service.execute(task);
} // 4. 关闭线程池
service.shutdown();

可以简化为:

ExecutorService service = Executors.newCachedThreadPool();

for (int i = 0; i < count; i++) {
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
});
}

可以进一步简化为(jdk8语法):

ExecutorService service = Executors.newCachedThreadPool();

for (int i = 0; i < count; i++) {
service.execute(() -> System.out.println(Thread.currentThread()));
}

java中Thread (线程)的更多相关文章

  1. Java中的线程Thread总结

    首先来看一张图,下面这张图很清晰的说明了线程的状态与Thread中的各个方法之间的关系,很经典的! 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口. 要注意的是Threa ...

  2. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  3. Java中的线程

    http://hi.baidu.com/ochzqvztdbabcir/item/ab9758f9cfab6a5ac9f337d4 相濡以沫 Java语法总结 - 线程 一 提到线程好像是件很麻烦很复 ...

  4. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  5. JAVA中创建线程的三种方法及比较

    JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...

  6. 浅谈利用同步机制解决Java中的线程安全问题

    我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等 ...

  7. 转载:java中Thread.sleep()函数使用

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  8. 第9章 Java中的线程池 第10章 Exector框架

    与新建线程池相比线程池的优点 线程池的分类 ThreadPoolExector参数.执行过程.存储方式 阻塞队列 拒绝策略 10.1 Exector框架简介 10.1.1 Executor框架的两级调 ...

  9. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。

    java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...

随机推荐

  1. CSP-S 2019游记

    Day 0 下午到了广州,酒店还不错,不好的是附近没有什么吃饭的地方 zyd和ljz巨神说如果上了450就女装. 晚上看了一下写过模板,本来准备敲几个新模板的的结果被卡常,心态没了.于是又把wys的卡 ...

  2. Python 入门之 内置模块 -- re模块

    Python 入门之 内置模块 -- re模块 1.re 模块 (1)什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类 ...

  3. elasticsearch系列一elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  4. Centos下安装nc命令工具安装以及使用

    1)netcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有 ...

  5. JS 的 Element元素对象

    在 HTML DOM 中, 元素对象代表着一个 HTML 元素. 元素对象 的 子节点可以是, 可以是元素节点,文本节点,注释节点. NodeList 对象 代表了节点列表,类似于 HTML元素的子节 ...

  6. 2019-11-29-C#-很少人知道的科技

    title author date CreateTime categories C# 很少人知道的科技 lindexi 2019-11-29 10:12:43 +0800 2018-03-16 08: ...

  7. Docker之rm: Device or resource busy

    docker 容器里 rm -rf /data 提示: rm: cannot remove ‘/data’: Device or resource busy 原因: 在建立容器的时候做了相应目录的挂载 ...

  8. 设置SVC模式

    清0:bic 置1:orr 访问cpsr和spdr要用到mrs和msr指令 mrs是把状态寄存器的值赋给通用寄存器 msr是把通用寄存器的值赋给状态寄存器 .text .global _start _ ...

  9. JavaScript运算符及语句

    ECMAScript 算术运算符 加,减,乘,除,-号可以表示负号 递增(++),递减(--) 两种写法:例:i++,i--,++i,--i,区别是运算符放在前面是先计算后输出,运算符放在后面先输出再 ...

  10. yum 报错2

    Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 打开/etc/yu ...