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. tf-图像预处理

    tensorflow 中自带了很多图像处理的方法,基本都在 tf.image 模块中,虽然不如 opencv 强大,但也比较常用,这里做个记录. 图像编解码 1. 用 tf 的方法读取图片后,都需要进 ...

  2. Maven build 命令介绍(转)

    常用命令: 打包:mvn package编译:mvn compile清空:mvn clean(清除编译后目录,默认是target目录)运行测试:mvn test安装jar包到本地仓库中:mvn ins ...

  3. 剑指offer-连续子数组的最大和-数组-python

    题目描述 例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止). 给一个数组,返回它的最大连续子序列的和 思路:动态规划 # -*- coding:u ...

  4. 5.jQuery之栏切换

    <style> * { margin: 0; padding: 0; } li { list-style-type: none; } .tab { width: 978px; margin ...

  5. vue动态渲染图片,引用路径需要注意的地方

    1.把图片放在和src同级的static里面,这用按照正常的方式进行引入,例如: 2.图片可以在其他文件夹,但是在script引入是必须加上require <img :src="ite ...

  6. 利用wampserve搭建本服务器

    1.官网下载安装包 注意:3.0.6版本需要下载依赖包vc依赖包 2.默认为英文 右击图标进入langue设置为中文 3.需要手动设置在现状态 右击=>选中wampsetting =>me ...

  7. maven 下载源码eclipse的配置

    1.在eclipse使用maven 下载源码包需要更改 D:\apache-maven-3.2.1-bin\apache-maven-3.2.1\conf 目录下 的 settings.xml 文件, ...

  8. Java 判断是否为回文字符串

    回文字符串有两种:abcba,abccba. 代码: static boolean func(String str) { int len = str.length(); for (int i = 0; ...

  9. linux c 链接详解3-静态库

    3静态库 摘自:Linux C编程一站式学习 透过本节可以学会编译静态链接库的shell脚本! 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程 ...

  10. Ubuntu无法安装nginx

    1.问题Reading package lists... DoneBuilding dependency tree       Reading state information... DoneSom ...