1、继承Thread类

public class MyThread extends Thread {
public MyThread() { }
public void run() {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread()+":"+i);
}
}
public static void main(String[] args) {
MyThread mThread1=new MyThread();
MyThread mThread2=new MyThread();
MyThread myThread3=new MyThread();
mThread1.start();
mThread2.start();
myThread3.start();
}
}

2、实现Runnable接口

public class MyThread implements Runnable{
public static int count=20;
public void run() {
while(count>0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-当前剩余票数:"+count--);
}
}
public static void main(String[] args) {
MyThread Thread1=new MyThread();
Thread mThread1=new Thread(Thread1,"线程1");
Thread mThread2=new Thread(Thread1,"线程2");
Thread mThread3=new Thread(Thread1,"线程3");
mThread1.start();
mThread2.start();
myThread3.start();
}
}

3、实现Callable接口

package com.yanshu;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; /**
* @author :yangyuanyuan
* @description:TODO
* @date :2021/1/22 14:05
*/ class Mythread implements Callable<Integer>{ @Override
public Integer call() throws Exception {
System.out.println("COME IN"); return 1024;
}
}
public class CallableDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> futureTask = new FutureTask(new Mythread());
new Thread(futureTask,"A").start();
Integer integer = futureTask.get();
System.out.println(integer); }
}

4、使用线程池

package com.yanshu;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* @author :yangyuanyuan
* @description:TODO
* @date :2021/1/22 14:38
*/
public class ThreadPool {
public static void main(String[] args) { /*
*FixThreadPool(int n); 固定大小的线程池
* 使用于为了满足资源管理需求而需要限制当前线程数量的场合。使用于负载比较重的服务器。
* pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-2 0
pool-1-thread-2 1
pool-1-thread-3 0
pool-1-thread-3 1
pool-1-thread-4 0
pool-1-thread-4 1
pool-1-thread-5 0
pool-1-thread-5 1
*
* */
// ExecutorService ex=Executors.newFixedThreadPool(5);
// for(int i=0;i<5;i++) {
// ex.submit(new Runnable() {
//
// @Override
// public void run() {
// for(int j=0;j<2;j++) {
// System.out.println(Thread.currentThread().getName()+"\t"+j);
// }
//
// }
// });
// }
// ex.shutdown(); /*
SingleThreadPoolExecutor :单线程池
需要保证顺序执行各个任务的场景
*
* pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-1 0
pool-1-thread-1 1
* /
ExecutorService ex=Executors.newSingleThreadExecutor(); for(int i=0;i<5;i++) {
ex.submit(new Runnable() { @Override
public void run() {
for(int j=0;j<2;j++) {
System.out.println(Thread.currentThread().getName()+"\t"+j);
} }
});
}
ex.shutdown(); /*
* CashedThreadPool(); 缓存线程池
当提交任务速度高于线程池中任务处理速度时,缓存线程池会不断的创建线程
适用于提交短期的异步小程序,以及负载较轻的服务器
*
* pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-2 0
pool-1-thread-2 1
pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-1 0
pool-1-thread-1 1
pool-1-thread-3 0
pool-1-thread-3 1
* */
ExecutorService ex=Executors.newCachedThreadPool(); for(int i=0;i<5;i++) {
ex.submit(new Runnable() { @Override
public void run() {
for(int j=0;j<2;j++) {
System.out.println(Thread.currentThread().getName()+"\t"+j);
} }
});
}
ex.shutdown(); }
}

Java创建线程四种方式的更多相关文章

  1. Java基础知识强化25:Java创建对象的四种方式

    1. Java程序中对象的创建有四种方式: ● 调用new语句创建对象,最常见的一种 ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Const ...

  2. java创建线程的多种方式

    java创建线程的四种方式 1.继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程. 首先定义一个类来继承 Thread 类,重写 run 方法. 然 ...

  3. 多线程-创建线程第二种方式-实现Runnable接口-细节和好处

    1 package multithread2; 2 3 /* 4 * 创建线程的第一种方法:继承Thread类 5 * 6 * 创建线程的第二种方式:实现Runnable接口 7 * 8 * 1,定义 ...

  4. Java 字符串拼接四种方式的性能比较分析

    一.简单介绍 编写代码过程中,使用"+"和"contact"比较普遍,但是它们都不能满足大数据量的处理,一般情况下有一下四种方法处理字符串拼接,如下: 1. 加 ...

  5. java笔记线程两种方式模拟电影院卖票

    public class SellTicketDemo { public static void main(String[] args) { // 创建三个线程对象 SellTicket st1 = ...

  6. java 多线程实现四种方式解析Thread,Runnable,Callable,ServiceExcutor,Synchronized ,ReentrantLock

    1.Thread实现: import java.util.Date; import java.text.SimpleDateFormat; public class MyThread extends ...

  7. java创建数组几种方式

    最近得多学学基础了,基础还是很重要的- int[] temp=new int[6]; int[] temp={1,2,3,4}; int[] temp= new int[]{1,2,3,4,5};  ...

  8. java创建对象的四种方式

    1.最常见的 new 一个 2使用反射机制创建对象,直接调用非构造函数 Class obj=Class.forName("A"); A a=obj.newInstance(); C ...

  9. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

随机推荐

  1. netty启动流程

    本文通过对netty服务端.客户端的启动流程分析, 让大家对netty是如何启动运行的. 废话不多说,上源码!!! 建议读者学习netty下的jar类型为 netty-example,里面有很多exa ...

  2. 转载-Oracle 数据库导入导出 dmp文件

    首先询问对方数据库的表空间名称和大小,然后在你的oracle中建立相应表空间,最后使用命令导入.导出数据.补充:1.要新建一个数据库: Oracle数据导入导出imp/exp就相当于oracle数据还 ...

  3. linux系统修改Swap分区【转】

    在装完Linux系统之后自己去修改Swap分区的大小(两种方法) 在安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swa ...

  4. C语言指针的大小

    C语言指针的大小 今天看到一道题目是这样的,写出以下变量在32位设备上的大小(占多少个字节) 然后其中就有一些指针类型的数据,那么我们知道在C语言中指针的大小都是一样的,不管是有数据类型的还是void ...

  5. Linux 入门教程:基础操作 01

    1.1 实验内容 实验楼环境介绍 常用 Shell 命令及快捷键 Linux 使用小技巧 1.2 实验知识点 Linux 基本命令 通配符的使用 查看帮助文档 终端的概念 通常我们在使用 Linux ...

  6. zookeeper读取事务日志、快照日志

    zookeeper的事务日志的格式如 log.xxx, xxx表示顺序序号 我使用的zookeeper版本:3.5.5 事务日志 执行命令 java -cp .:/tmp/zookeeper-3.5. ...

  7. 【MYSQL】win7安装mysql-5.7.10绿色版

    1.下载 :mysql下载地址 2.解压缩 3.环境变量配置 MYSQL_HOME=D:\mysql-5.7.11-win32 PATH=%MYSQL_HOME%\bin 4.修改配置文件 a.)将m ...

  8. 【Oracle】11G 11.2.0.4 RAC环境打补丁

    一.准备工作 1,数据库环境 操作系统版本  : RedHat 7.2 x64   数据库版本    : Oracle 11.2.0.4 x64 RAC    Grid          : 11.2 ...

  9. SAP client锁定

    今天发现一个函数可以锁定SAP CLIENT . SCCR_LOCK_CLIENT 参数是client号码. 还可以通过事物SU10批量锁定用户登陆client

  10. BDC应用

    第一步:SHDB或者是SM35进入BDC录制事务.开始录制. 第二部:保存录制的记录. 第三步:在你自己的程序中定义一个内表如:ITAB TYPE TABLE OF BDCDATA. 再定义一个工作空 ...