java中Thread (线程)
Thread
使用新线程的步骤:
- 通过覆写 Thread 的
run方法,配置新线程需要做的事情 - 创建新线程对象
new YourThread() - 开启线程
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 (线程)的更多相关文章
- Java中的线程Thread总结
首先来看一张图,下面这张图很清晰的说明了线程的状态与Thread中的各个方法之间的关系,很经典的! 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口. 要注意的是Threa ...
- 【Java中的线程】java.lang.Thread 类分析
进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...
- Java中的线程
http://hi.baidu.com/ochzqvztdbabcir/item/ab9758f9cfab6a5ac9f337d4 相濡以沫 Java语法总结 - 线程 一 提到线程好像是件很麻烦很复 ...
- [译]线程生命周期-理解Java中的线程状态
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- 浅谈利用同步机制解决Java中的线程安全问题
我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等 ...
- 转载:java中Thread.sleep()函数使用
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- 第9章 Java中的线程池 第10章 Exector框架
与新建线程池相比线程池的优点 线程池的分类 ThreadPoolExector参数.执行过程.存储方式 阻塞队列 拒绝策略 10.1 Exector框架简介 10.1.1 Executor框架的两级调 ...
- Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。
java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...
随机推荐
- Kali安装在U盘+使用aircrack-ng套件
因为: Kali Linux 自带aircrack-ng 虚拟机VMware不能用笔记本内置网卡,需要另外买一个无线网卡,然而并不想买 不想给笔记本重装Kali Linux系统 有闲置的32GU盘 所 ...
- 生成url的二维码图片
<?php require_once "./phpqrcode.php"; //生成二维码 $img = \QRcode::png("https://www.bai ...
- 浏览器给openresty连接发送参数请求,查询数据库,并返回json数据
nginx.conf配置文件 #user nobody; worker_processes 1; error_log logs/error.log; #error_log logs/error.log ...
- Yii中实例化类的四种方式
1.最简单的也是最基本的,大家都会的一种 use yii\caching\FileCache; $cache = new FileCache(); $cache->set("name& ...
- 091、万能的数据收集器 Fluentd (2019-05-15 周三)
参考https://www.cnblogs.com/CloudMan6/p/7798224.html 前面的ELK 中我们使用的是 Filebeat 收集Docker日志,利用的是默认的loggi ...
- LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。
一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...
- JS 一位数左边补零
- Solr IK分词器配置
下载地址:https://search.maven.org/search?q=com.github.magese 分词器配置: 参考:https://www.cnblogs.com/mengjinlu ...
- wpf Textbox 回车就换行
将 TextWrapping 属性设置为 Wrap 会导致输入的文本在到达 TextBox 控件的边缘时换至新行,必要时会自动扩展 TextBox 控件以便为新行留出空间. 将 AcceptsRetu ...
- thinkphp5杂谈--项目架构和模板搭建(view视角)
nginx网站配置 项目架构 项目文件夹 视图模板 一种出幺蛾子的访问办法 访问相关特色模块并渲染视图