java多线程的写法三个线程_Java多线程的几种写法
Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口;
1.继承Thread方法
class TestThread extends Thread{
String name;
public TestThread(String name){
this.name=name;
}
@Override
public void run() {
for (int i = 0; i < 6; i++) {
System.out.println(this.name+":"+i);
}
}
}
main方法调用:
Thread启动有两个方法,一个是start()方法,一个是run()方法,但是直接调用run方法时线程不会交替运行,而是顺序执行,只有用start方法时才会交替执行
TestThread tt1 = new TestThread("A");
TestThread tt2 = new TestThread("B");
tt1.start();
tt2.start();
运行结果:
2.实现Runnable接口,有多种写法
2.1外部类
class TestRunnable implements Runnable{
String name;
public TestRunnable(String name){
this.name=name;
}
@Override
public void run() {
for (int i = 0; i < 6; i++) {
System.out.println(this.name+":"+i);
}
}
}
调用:
TestRunnable tr1 = new TestRunnable("C");
TestRunnable tr2 = new TestRunnable("D");
new Thread(tr1).start();
new Thread(tr2).start();
2.2匿名内部类方式
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).start();
2.3 Lamda表达式,jdk1.8,只要是函数式接口,都可以使用Lamda表达式或者方法引用
new Thread(()->{
for (int i = 0; i < 6; i++) {
System.out.println(i);
}
}).start();
2.4ExecutorService创建线程池的方式
class TestExecutorService implements Runnable{
String name;
public TestExecutorService(String name){
this.name=name;
}
@Override
public void run() {
for (int i = 0; i < 6; i++) {
System.out.println(this.name+":"+i);
}
}
}
调用:可以创建固定个数的线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
TestExecutorService tes1 = new TestExecutorService("E");
TestExecutorService tes2 = new TestExecutorService("F");
pool.execute(tes1);
pool.execute(tes2);
pool.shutdown();
运行结果跟2.1差不多
3.实现Callable接口,可以返回结果
//Callable提供返回数据,根据需要返回不同类型
class TestCallable implements Callable{
private int ticket = 5;
@Override
public String call() throws Exception {
for (int i = 0; i < 5; i++) {
if(this.ticket>0)
System.out.println("买票,ticket="+this.ticket--);
}
return "票卖完了";
}
}
调用:
Callable tc = new TestCallable();
FutureTask task = new FutureTask(tc);
new Thread(task).start();
try {
System.out.println(task.get());//获取返回值
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
运行结果:
java多线程的写法三个线程_Java多线程的几种写法相关推荐
- java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)
高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...
- java登录时启动后台异步线程_JAVA多线程的同步和 异步
原标题:JAVA多线程的同步和 异步 1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是 ...
- java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...
java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...
- 简述java的线程_Java多线程的简述
线程与进程 进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进 ...
- Java多线程:用三个线程控制循环输出10次ABC
题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次. 解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同 ...
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了.如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的.如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行 ...
- java 创建线程_java多线程|创建线程的各种方式
javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...
- java多线程编程(三)- 线程的创建
一:线程说明 1,Java虚拟机允许应用程序并发的运行多个执行线程. 2,线程都有自己的优先级,新线程会继承创建它的线程优先级. 3,线程可以为守护线程和用户线程,如java资源回收线程为守护线程.当 ...
- auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态
一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process).一个程序进入内存运行,即变成一 ...
最新文章
- linux如何安装VM虚拟机
- codeforces 101466E Text Editor(hash)
- [DP] LGTB 玩THD (复杂状态DP)
- python监控进程并实现掉线重启
- 处理JUnit中异常的另一种方法:catch-exception
- 如何在面试中通过工厂模式来给自己加分?逆袭面经分享
- 【HDU - 6187】Destroy Walls(思维,最大生成树)
- flash动画制作常用代码
- 复盘SpringBoot中定时任务和异步线程池
- jquery控制只监听数字_如何在jQuery中监听并保持单击?
- Ansible(五)远程创建用户并对密码进行加密设置
- SQLite 指南之FAQ(中文)
- C#正则怎么判断字符串中是否有汉字
- html弄多个按钮_html - 一个表单中的两个提交按钮
- iOS.Debug.Simulator
- 分享我的第一次Selenium自动化测试框架开发过程
- java限制输入字符长度_input限制输入长度
- JSHOP2环境配置
- php脚本爬取头像图片
- clickhouse 如何使用SQL 管理用户和角色