Java--多线程

1.什么是线程

线程,又称轻量级进程(Light Weight Process)。 进程中的一条执行路径,也是CPU的基本调度单位。 一个进程由一个或多个线程组成,彼此间完成不同的工作, 同时执行,称为多线程。

2.进程与线程的区别

1.进去是操作系统资源分配的基本单位,而线程是CPU基本调度单位。

2.一个程序运行后至少有一个进程。一个进程可以包含多个线程,但至少需要一个线程。

3.进程间不能共享数据段地址,但是同进程的线程可以。

3.线程的组成

任何一个线程都具有最基本的组成部分

1.CPU时间片:操作系统(os)会为每个线程分配执行时间。

2.运行数据: 堆空间:存储线程需要的对象,多个线程可以共享堆的中的数据。

                       栈空间:存储线程需要的局部变量,每个线程都拥有独立的栈。

3.线程的逻辑代码。

4.线程的特点

1.线程抢占式执行。

效率高  可防止单一线程长时间占用CPU

2.在单核CPU中,宏观上同时执行,微观上顺序执行。

5.线程的创建

1.继承 Thread类,重写run方法

package com.lzl.test01;

/**
 * @create 2022-07-18
 */
//继承Thread 方法重写 run方法
public class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("----------");
    }
}


package com.lzl.test01;

/**
 * @create 2022-07-18
 */
public class Test01 {
    public static void main(String[] args) {
        //创建线程对象
        MyThread myThread =new MyThread();
        //开启线程
        myThread.start();
    }
}

2.实现Runnable接口

package com.lzl.test01;

/**
 * @create 2022-07-18
 */
//实现 Runnable 接口 
public class MyRunnable implements Runnable{
    @Override
    //重写run方法
    public void run() {
        System.out.println("-----------");
    }
}

package com.lzl.test01;

/**
 * @create 2022-07-18
 */
public class Test02 {
    public static void main(String[] args) {
        //创建线程对象
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);

        //开启线程
        thread.start();
    }
}

3.实现Callable接口, 他和实现Runnable接口差不多,就是该接口中的方法有返回值和异常抛出

package com.lzl.test01;

import java.util.concurrent.Callable;

/**
 * @create 2022-07-18
 */
//实现 Callable 接口
public class MyCallable implements Callable {
    @Override
    //该接口中的方法有 返回值 和 抛出异常
    public Object call() throws Exception {
        return 200;
    }
}



import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @create 2022-07-18
 */
public class Test03 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建线程对象
        MyCallable myCallable = new MyCallable();
        //创建一个单一线程池
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        //提交任务给线程池中线程对象、Runnable和Callable类型的任务。
        Future submit = executorService.submit(myCallable);
        //获取执行方法后的返回值
        Object o = submit.get();
        System.out.println(o);
    }
}

6.获取和设置线程的名称

1.获取线程的ID和线程名称

        1.在Thread的子类中调用this.getid()或this.getName();

        2.使用Thread.currentThread().getId()或Thread.currentThread().getName().

package com.lzl.test02;

/**
 * @create 2022-07-18
 */
public class Test01 {
    public static void main(String[] arg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值