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. 02、CDF文件

    有了探针排布图像的基础,我们就可以更好地理解CDF文件了.假如每个探针的位置用一个坐标表示,以左上角为(0,0),那么整张芯片的坐标就如下图(行数n必须等于列数m,这里共有n*m个探针): 0,0 1 ...

  2. Kibana server is not ready yet出现的原因

    第一点:KB.ES版本不一致(网上大部分都是这么说的) 解决方法:把KB和ES版本调整为统一版本 第二点:kibana.yml中配置有问题(通过查看日志,发现了Error: No Living con ...

  3. java io 文件读写操作

    写: import java.io.*; String filePath= "F:\\test.txt"; FileWriter fwriter = null; fwriter = ...

  4. Vue配置bs环境

    安装插件 jQuery >: cnpm install jquery vue/cli 3 配置jQuery:在vue.config.js中配置(没有,手动项目根目录下新建) const webp ...

  5. C语言面试相关知识点

    1.关键字static的作用是什么? 有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这个函数被调用过程中维持其值不变 2)在模块内(但在函数体外),静态的变量可以被模块内所有函数访问,但 ...

  6. WebApi 生成帮助文档及顺便创建简单的测试工具

    http://www.2cto.com/kf/201607/522971.html ==========最终的效果图========== ==========下面开始干活========== 一.创建 ...

  7. s:schema报错问题

    解决方案: 删除所有<s:element ref="s:schema"/>标签 说明书改为本地文件

  8. linux 下 SpiderMonkey 1.7.0 编译和安装

    wget http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz tar xf js-1.7.0.tar.gz cd js/src make ...

  9. 构造函数为何不能用abstract, static, final修饰

    不同于方法,构造器不能是abstract, static, final的. 1.构造器不是通过继承得到的,所以没有必要把它声明为final的. 2.同理,一个抽象的构造器将永远不会被实现,所以它也不能 ...

  10. PHP漏洞函数

    1. is_numeric函数 bool is_numeric ( mixed $var ) 此函数用于判断变量是否数字或者数字字符串,不仅能接受十进制,还能接受十六进制,这样就有了绕过的方法 < ...