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多线程的几种写法相关推荐

  1. java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)

    高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...

  2. java登录时启动后台异步线程_JAVA多线程的同步和 异步

    原标题:JAVA多线程的同步和 异步 1.多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为多线程和异步操作是等同的概念.但是 ...

  3. java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...

    java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...

  4. 简述java的线程_Java多线程的简述

    线程与进程 进程: ​ 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进 ...

  5. Java多线程:用三个线程控制循环输出10次ABC

    题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次. 解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同 ...

  6. java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?

    通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了.如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的.如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行 ...

  7. java 创建线程_java多线程|创建线程的各种方式

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...

  8. java多线程编程(三)- 线程的创建

    一:线程说明 1,Java虚拟机允许应用程序并发的运行多个执行线程. 2,线程都有自己的优先级,新线程会继承创建它的线程优先级. 3,线程可以为守护线程和用户线程,如java资源回收线程为守护线程.当 ...

  9. auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态

    一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process).一个程序进入内存运行,即变成一 ...

最新文章

  1. linux如何安装VM虚拟机
  2. codeforces 101466E Text Editor(hash)
  3. [DP] LGTB 玩THD (复杂状态DP)
  4. python监控进程并实现掉线重启
  5. 处理JUnit中异常的另一种方法:catch-exception
  6. 如何在面试中通过工厂模式来给自己加分?逆袭面经分享
  7. 【HDU - 6187】Destroy Walls(思维,最大生成树)
  8. flash动画制作常用代码
  9. 复盘SpringBoot中定时任务和异步线程池
  10. jquery控制只监听数字_如何在jQuery中监听并保持单击?
  11. Ansible(五)远程创建用户并对密码进行加密设置
  12. SQLite 指南之FAQ(中文)
  13. C#正则怎么判断字符串中是否有汉字
  14. html弄多个按钮_html - 一个表单中的两个提交按钮
  15. iOS.Debug.Simulator
  16. 分享我的第一次Selenium自动化测试框架开发过程
  17. java限制输入字符长度_input限制输入长度
  18. JSHOP2环境配置
  19. php脚本爬取头像图片
  20. clickhouse 如何使用SQL 管理用户和角色

热门文章

  1. efl是什么意思_efl
  2. Spring Ioc创建对象的方式
  3. 软件包管理:源码包管理-源码包与RPM包的区别
  4. jQuery入门:认识jQuery
  5. MyBaits resultMap 返回值与对象不匹配处理
  6. iOS开发 UILabel实现自适应高宽
  7. 刨一刨内核container_of()的设计精髓
  8. 二道Const,readonly 和 override, new的面试题
  9. csdn相册超出了20m了,怎么办?求助
  10. Java的五子棋实现,java开发面试笔试题