java多线程的基本使用(代码片段)

今晚看星星 今晚看星星     2023-01-12     774

关键词:

1. 多线程的概念

  1. 在程序执行的时候,即使没有开启多线程,Java后台也有多个线程在运行,最基本的是主线程main,垃圾回收线程gc
  2. 线程的运行有调度器安排调度,与操作系统相关,其调度顺序不能人为干预
  3. 多个线程对同一个资源进行交互的时候,需要加入并发控制,否则会造成数据的不一致
  4. 多线程会带来额外的开销

2. 线程的实现方式

  • Java中多线程有三种实现方式,分别为:1. 继承Thread类, 2. 实现Runnable接口, 3. 实现callable接口
  • 对于直接继承Thread类的多线程,每一个线程操作的对象都是独立的,没有并发控制的问题;对于实现接口的多线程,需要在Thread对象中运行,属于静态代理的方式,其多个线程共同操作一个对象,涉及到并发控制的问题

2.1 继承Thread类实现多线程

public class ThreadTest 

    public static void main(String[] args) 

        // 1. Test multi-thread extends Thread Class
        MyThread1 myThread1 = new MyThread1();
        myThread1.start();

        MyThread1 myThread2 = new MyThread1();
        myThread2.start();
    



class MyThread1 extends Thread

    @Override
    public void run() 
        super.run();

        System.out.println("extends Thread class and execute it, the id is: " + this.getName());

    


2.2 实现Runnable接口实现多线程

  • 实现接口的多线程需要在Thread的环境中运行
public class ThreadTestRunnable 

    public static void main(String[] args) 
        MyThread1 myThread1 = new MyThread1();

        // 1. 实现接口的多线程与继承的执行方式不同
        // 2. Thread 实现了 Runnable的代理,它完成了多线程执行的基础结果

        new Thread(myThread1, "Thread_one").start();
        new Thread(myThread1, "Thread_two").start();
    



class MyThread2 implements Runnable

    @Override
    public void run() 
        System.out.println("The Thread is running and it implements runnable port. The name of the Thread is " + Thread.currentThread().getName());
    


2.3 实现Callable的多线程

实现Callable的多线程的处理过程如下:

  1. 实现callable接口并指定范型,该范型与call方法返回的类型一致

  1. 创建服务,指定线程池的数量
    ExecutorService eSer = Executors.newFixedThreadPool(3);
  2. 在服务中提交线程
    Future<Boolean> submit1 = eSer.submit(thread1);
  3. 获取线程的执行结果
    Boolean result1 = submit1.get();
  4. 关闭线程池服务
    eSer.shutdown();
import java.util.concurrent.*;

public class MainClass 

    public static void main(String[] args) 
        Callable<Boolean> thread1 = new MyThread();
        Callable<Boolean> thread2 = new MyThread();
        Callable<Boolean> thread3 = new MyThread();

        // 1. 创建服务,设置线程池
        ExecutorService eSer = Executors.newFixedThreadPool(3);

        // 2. callable的线程提交进行执行
        Future<Boolean> submit1 = eSer.submit(thread1);
        Future<Boolean> submit2 = eSer.submit(thread2);
        Future<Boolean> submit3  = eSer.submit(thread3);

        // 3. 获取线程执行的结果
        try 
            Boolean result1 = submit1.get();
            Boolean result2 = submit2.get();
            Boolean result3 = submit3.get();

         catch (InterruptedException e) 
            e.printStackTrace();
         catch (ExecutionException e) 
            e.printStackTrace();
        
        // 4. 关闭线程池服务
        eSer.shutdown();
    



class MyThread implements Callable<Boolean>

    @Override
    public Boolean call() throws Exception 
        for (int i = 0; i < 20; i++) 
            System.out.println( Thread.currentThread().getName() + " is running in " + i);
        
        return true;
    



关于线程的三种基本实现方式

线程的基本使用(代码片段)

上一篇 多线程的基本概念了解完多线程的概念之后,我们先来看一下线程的基本使用。Java线程的两种实现方式Java中实现线程的方式有两种继承自Thread类,在子类实现run方法实现Runnable接口,重写run方法我们先来简单... 查看详情

java_多线程(代码片段)

...Java_基本概念Java_单核和多核的理解Java_并行与并发Java_多线程Java_线程的创建和使用Java_Thread类Java_创建线程的两种方式Java_基本概念程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静... 查看详情

java多线程-thead线程学习记录笔记(代码片段)

介绍的内容:主要介绍多线程的基本概念到后面的基本使用。以及一些稍微的原理猜测。个人笔记,不喜勿喷 目录目录一、线程使用1.1概念1.2线程生命周期1.3java中实现的方式 1.3.1 继承线程Thread1.3.2实现接口Runnable(... 查看详情

c++11多线程--基本使用(代码片段)

c++11多线程–基本使用前言:这篇文章仅针对没有使用过c++11线程库的童鞋来快速入门,也是自己的一个简单记录,内容比较基础。1.线程的基本使用2.互斥量3.条件变量4.原子变量补充1.线程的基本使用代码... 查看详情

java多线程(代码片段)

多线程进程其他相关概念创建线程的两种方式为什么使用start()方法而不直接使用run()方法start()方法底层继承Thread和实现Rnnable的区别售票系统SellTicket01类继承Thread实现SellTicket02类实现Runnable接口线... 查看详情

java多线程只是总结(代码片段)

一,线程的生命周期以及五种基本状态  关于JAVA线程的生命周期,首先看一下下面这张图  上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。Java线程具有五... 查看详情

java总结篇系列:java多线程(代码片段)

多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上... 查看详情

java多线程面试(代码片段)

1、说说进程、线程、协程之间的区别简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程.进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率... 查看详情

java多线程进阶threadlocal(代码片段)

....3、remove移除4、内存泄露1、基本使用ThreadLocal的作用是在线程内保证其携 查看详情

java总结篇系列:java多线程(代码片段)

Java总结篇系列:Java多线程(一)多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上... 查看详情

java多线程——thread类及常见方法和线程的基本操作(代码片段)

文章目录一、Thread的常见构造方法二、Thread常见属性1.线程名字2.线程的状态3.优先级4.后台线程5.线程是否存活三、线程的基本操作1.start(启动线程)2.Sleep(休眠线程)3.currentThread(获取当前线程引用)4.i... 查看详情

java——多线程高并发系列之threadlocal的使用(代码片段)

...除了控制资源的访问外,还可以通过增加资源来保证线程安全。ThreadLocal主要解决为每个线程绑定自己的值。Demo1packagecom.szh.threadlocal;/***ThreadLocal的基本使用*/publicclassTest01//定义一个ThreadLocal对象staticThread 查看详情

尚硅谷_java零基础教程(多线程)--学习笔记(代码片段)

Java多线程一、基本概念1、程序、进程、线程2、单核CPU和多核CPU、并行与并发3、使用多线程的优点二、线程的创建和使用1、API中创建线程的两种方式1.1、方式一:继承Thread类1.2、方式二:实现Runnable接口1.3、Thread类的调... 查看详情

java总结篇系列:java多线程(代码片段)

多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上... 查看详情

java高级---多线程快速入门(代码片段)

...胃里的食物,二是藏在心中的梦想,三是读进大脑的书多线程快速入门1、线程与进程区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里... 查看详情

java多线程编程之异步(代码片段)

日常开发中我们在一个接口中需要处理多个任务,通常都是串行的,这样导致接口的响应时间是每个任务的执行时间的总和。为了缩短响应时间,通常会使用异步处理多任务。需求举例:查询书籍基本信息,... 查看详情

java与线程(代码片段)

并发不一定要依赖多线程(如PHP的多进程并发),但在Java中谈论并发,大多数都与线程脱不开关系。线程的实现线程是CPU调度的基本单位。Thread类与大部分的JavaAPI有显著的差别,它的所有关键方法都是声明为... 查看详情

c#高效率编程“多线程”的基本使用(代码片段)

英文意思:什么是多线程?比如你需要建房子,如果使用单线程,房子的门,地板,水管等都是你一个人安装,这样效率特别的低总知就是“终究还是一个人扛下了所有”。但是在开一个线程就可以把... 查看详情