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

  1. public class MultiThreadByExtends extends Thread {
  2. @Override
  3. public void run() {
  4. print("听歌");
  5. }
  6. public static void print(String threadName){
  7. while (true) {
  8. System.out.println("线程:"+threadName+" 输出。。。");
  9. try {
  10. sleep(1000);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  16.  
  17. public static void main(String[] args) {
  18. MultiThreadByExtends t1 = new MultiThreadByExtends();
  19. t1.start();
  20. print("写代码");
  21. }
  22. }

输出结果:

  1.  

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

  1.  

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

2、实现Runable接口

  1. public class MultiThreadByRunnable implements Runnable {
  2. @Override
  3. public void run() {
  4. print("听歌");
  5. }
  6. public static void print(String threadName){
  7. while (true) {
  8. System.out.println("线程:"+threadName+" 输出。。。");
  9. try {
  10. Thread.sleep(1000);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  16.  
  17. public static void main(String[] args) {
  18. MultiThreadByRunnable tr1 = new MultiThreadByRunnable();
  19. //代理方式启动
  20. Thread thread = new Thread(tr1);
  21. thread.start();
  22. print("写代码");
  23. }
  24. }

输出结果:

  1. 线程:写代码 输出。。。
  2. 线程:听歌 输出。。。
  3. 线程:写代码 输出。。。
  4. 线程:听歌 输出。。。
  5. 线程:听歌 输出。。。
  6. 线程:写代码 输出。。。
  7. 线程:听歌 输出。。。
  8. 线程:写代码 输出。。。

3、实现callable接口

  1. import java.util.concurrent.*;
  2.  
  3. public class CallableTest implements Callable<Boolean> {
  4. @Override
  5. public Boolean call() throws Exception {
  6. int count = 0;
  7. while (true){
  8. System.out.println("1111");
  9. Thread.sleep(1000);
  10. count++;
  11. if(count >10) {
  12. break;
  13. }
  14. }
  15. return true;
  16. }
  17.  
  18. public static void main(String[] args) throws ExecutionException, InterruptedException {
  19.  
  20. CallableTest c = new CallableTest();
  21. ExecutorService es = Executors.newFixedThreadPool(1);
  22. Future<Boolean> res = es.submit(c);
  23. System.out.println(res.get());
  24. es.shutdownNow();
  25. }
  26. }

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

平时开发中常用到的就是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. 初读"Thinking in Java"读书笔记之第七章 --- 复用类

    组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...

  2. java基础知识—数组

    1.数组:是一个变量,存储相同数据类型的一组数据. 2.数据的优点:减少代码量.易查找. 3.数组的使用步骤: 1)声明数组:int scores []: 2)开辟空间:scores = new in ...

  3. [AutoMapper]反射自动注册AutoMapper Profile

    AutoMapper 帮我我们方便管理物件跟物件之间属性值格式转换 模型转换 这里有两个类别 UserInfoModel 当作我们从DB捞取出来模型资料 public class UserInfoMo ...

  4. JavaScript 获得客户端IP

    Below are all the free active IP lookup services I could find and the information they return. If yo ...

  5. php字符串转数组

    下面代码包括了含有中文汉字的字符. function str2arr($str) { $length = mb_strlen($str, 'utf-8'); $array = []; for ($i= ...

  6. linux下ftp权限控制

    需求背景: 1.创建2个账号给联调的系统使用读取我方服务器提供的文件信息.只允许看到限定的目录,对目录下的文件只有只读权限,禁止shell登录. 2.创建一个内部账号提供文件信息,只允许看到限定的目录 ...

  7. linux之文件权限+用户权限

    chmod 文件权限命令: 文件权限: r是否能查看文件内容 w是否能修改文件的内容,需要与r权限配合使用   只有w的时候vim强制修改文件内容,会导致源文件内容清空 x是否能运行命令或脚本权限,需 ...

  8. 2019-04-23-day038-数据库的语句

    昨日回顾 补充的知识点 server端肯定是确定下来的 mysql的客户端 mysql.exe 直接在命令行就可以运行的 (学习阶段用) navicat等可视化的客户端,是第三方开发的客户端 (开发辅 ...

  9. socket网络编程-----I/O复用之poll函数

    #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/soc ...

  10. TCP/UDP 网络工具

    1. 统计连接状态 netstat -n | awk '/^tcp/ {++State[$NF]} END {for(s in State) print s, State[s]}' CLOSE_WAI ...