java系列(二)--java多线程

本文详细介绍了Java中的多线程概念,包括线程的生命周期,如新建、运行、阻塞、等待、死亡等状态。同时,讲解了通过继承Thread类、实现Runnable接口和Callable接口创建线程的三种方式,并举例说明。此外,还讨论了线程同步的关键机制synchronized和Lock,以及线程池的使用。通过对这些内容的掌握,读者将能更好地理解和应用Java多线程编程。
摘要由CSDN通过智能技术生成

前言

本片介绍java中多线程生命周期,及几种实现方式。

一、什么是多线程?

  • 进程 : 是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元;
  • 线程: 就是进程中的一个独立控制单元,线程在控制着进程的执行。一个进程中至少有一个进程。
  • 多线程: 一个进程中不只有一个线程。

二、多线程的生命周期

2.1、线程状态

在这里插入图片描述

在这里插入图片描述

2.2、线程方法

 1. stop方法:线程停止,不推荐使用.建议通过时间或者次数或者标记位停止线程
 2. sleep方法:休眠(运行状态改为就绪状态),不释放锁。可以模拟网络延时、倒计时等.
 3. yield方法:礼让,停止当前正在执行的线程(运行状态改为就绪状态),不一定成功,主要看cpu调度情况
 4. join方法:合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
 5. 

 1. setPriority(1):设置优先级,数字越大,优先级越高,但是执行时不一定按这个优先级来
 2. setDaemon(true):设置守护线程(true),默认为用户线程(false)

三、多线程的实现方式

3.1、继承Thread类

public class ChenThread extends Thread{

    @Override
    public void run() {
        super.run();
        for(int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"测试-------");
        }
    }

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"--开始-------");
        ChenThread chenThread=new ChenThread();
        chenThread.start();
        System.out.println(Thread.currentThread().getName()+"--结束--------");
    }
}

3.2 、实现Runable接口

public class ChenRunnable implements Runnable{
    @Override
    public void run() {
        for(int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"测试-------");
        }
    }

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"--开始-------");
        ChenRunnable chenRunnable=new ChenRunnable();
        new Thread(chenRunnable).start();
        System.out.println(Thread.currentThread().getName()+"--结束--------");
    }
}

3.3、 实现Callable接口

public class TestCallable  implements Callable<Boolean> {

    @Override
    public Boolean call(){
        System.out.println(Thread.currentThread().getName()+"测试.");
        return true;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        TestCallable t1=new TestCallable();
        TestCallable t2=new TestCallable();

        ExecutorService service= Executors.newFixedThreadPool(2);
        Future<Boolean> r1=service.submit(t1);
        Future<Boolean> r2=service.submit(t2);

        System.out.println("r1运行结果"+r1.get());
        System.out.println("r2运行结果"+r2.get());
        //关闭服务
        service.shutdown();
    }

}

四、线程同步机制

4.1、synchronized

4.2、lock

五、线程池

public class Test5 {

    public static void main(String[] args) {
        ExecutorService service= Executors.newFixedThreadPool(10);
        service.execute(new Chen());
        service.execute(new Chen());
        service.execute(new Chen());
        service.execute(new Chen());
        service.shutdown();
    }
}

class Chen implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值