1、继承Thread类,通过start()方法调用

public class MultiThreadByExtends extends Thread {
@Override
public void run() {
print("听歌");
}
public static void print(String threadName){
while (true) {
System.out.println("线程:"+threadName+" 输出。。。");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
MultiThreadByExtends t1 = new MultiThreadByExtends();
t1.start();
print("写代码");
}
}

输出结果:


线程:写代码 输出。。。
线程:听歌 输出。。。
线程:写代码 输出。。。
线程:听歌 输出。。。
线程:写代码 输出。。。
线程:听歌 输出。。。
线程:听歌 输出。。。

 

由于java单继承的特点,这种方式局限性很大,不能继承其他父类

2、实现Runable接口

public class MultiThreadByRunnable implements Runnable {
@Override
public void run() {
print("听歌");
}
public static void print(String threadName){
while (true) {
System.out.println("线程:"+threadName+" 输出。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
MultiThreadByRunnable tr1 = new MultiThreadByRunnable();
//代理方式启动
Thread thread = new Thread(tr1);
thread.start();
print("写代码");
}
}

输出结果:

线程:写代码 输出。。。
线程:听歌 输出。。。
线程:写代码 输出。。。
线程:听歌 输出。。。
线程:听歌 输出。。。
线程:写代码 输出。。。
线程:听歌 输出。。。
线程:写代码 输出。。。

3、实现callable接口

import java.util.concurrent.*;

public class CallableTest implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
int count = 0;
while (true){
System.out.println("1111");
Thread.sleep(1000);
count++;
if(count >10) {
break;
}
}
return true;
} public static void main(String[] args) throws ExecutionException, InterruptedException { CallableTest c = new CallableTest();
ExecutorService es = Executors.newFixedThreadPool(1);
Future<Boolean> res = es.submit(c);
System.out.println(res.get());
es.shutdownNow();
}
}

该方式的优点是可以得到线程的返回值

平时开发中常用到的就是1、2两种方式,至于第三种,属于JUC里面的东西,如果在面试中能答上来,对初级或中级java面试来说绝对是加分项

[JAVA]JAVA实现多线程的三种方式的更多相关文章

  1. java 实现md5加密的三种方式与解密

      java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...

  2. Java 实现线程安全的三种方式

    一个程序在运行起来的时候会转换成进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如显示生活中,银行取钱问题.火车 ...

  3. Java基础—实现多线程的三种方法

    Java虚拟机(JVM,是运行所有Java程序的抽象计算机,是Java语言的运行环境)允许应用程序并发地运行多个线程.在Java语言中,多线程的实现一般有以下三种方法: 1.实现Runnable接口, ...

  4. java中遍历集合的三种方式

    第一种遍历集合的方式:将集合变为数组 package com.lw.List; import java.util.ArrayList; import java.util.List; import ja ...

  5. java加载配置文件的三种方式

    比如我们要加载db.properties文件 如图: 比如我们要加载source目录下的db.properties文件.就有以下几种方式 第一种是文件io流: public static void l ...

  6. JAVA实现Base64编码的三种方式

    摘要: Javabase64编码的三种方式   有如下三种方式: 方式一:commons-codec.jar Java代码  1. String base64String="whuang12 ...

  7. Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查

    前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...

  8. java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  9. 【转载】java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  10. HTTP:Java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种: 一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,H ...

随机推荐

  1. LINQ Expresstion Tree 表达式树

    Expression trees represent code in a tree-like data structure, where each node is an expression, for ...

  2. Java面试题集锦(持续更新)

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: -抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这 ...

  3. selenium的三种等待方式

    selenium有三种等待方式 1.time.sleep() 设置等待最简单的方法就是强制等待,但一般不建议使用,可以在调试的时候进行使用 2.隐性等待 driver.implictily_wait( ...

  4. holer实现外网访问本地tomcat

    外网访问内网Tomcat 内网主机上安装了Tomcat,只能在局域网内访问,怎样从公网也能访问本地Tomcat? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装Java 1.7 ...

  5. C++实验:时间和日期类

    描述 用C++实现日期类CDate和时间类CTime,并在次基础上利用多继承实现日期时间类CDateTime,使其能输出样例信息. 主函数里的代码已经给出,请补充完整,提交时请勿包含已经给出的代码. ...

  6. Python 子进程不能input

    from threading import Thread from multiprocessing import Process def f1(): name = input('请输入名字') #EO ...

  7. LoadRunner学习笔记(1)--异常处理方法

    1.查看端口号占用情况 cmd  -> netstat  -ano  找到进程关闭后在重启网站 2.LR录制脚本时为何不弹出IE浏览器 启动浏览器,打开Internet选项对话框,切换到高级标签 ...

  8. C#引用C++的DLL方案(C#调用非托管动态链接库)

    SocketClientInit是C++里面定义的方法,通过EntryPoint = "?SocketClientInit@@YAHHHPAD@Z"指出这个函数的真正入口处,方法是 ...

  9. ZoomCharts

    net chart 配置links没有id的话,画图的links会丢失

  10. Spring Boot的第一个程序

    Spring boot是由Pivotal团队提供的全新框架,在设计之初,其目的是为了简化Spring应用的创建.运行.测试.调试.部署的过程.Spring Boot框架不仅简化了Spring的搭建过程 ...