多线程入门

一、线程概念

程序:静态的:指的是代码,没有运行的

动态:正在运行的程序

进程:正在独立执行的程序叫做进程。QQ、迅雷、百度网盘

线程:在进程中执行的一个任务叫做线程。

QQ:聊天、视频、传输文件

百度网盘:下载多个文件

在操作系统中,每个运行的程序都是一个进程

在一个进程中开辟的多个执行单元同时运行,来完成不同的多个任务

每一个执行单元都可以看作程序执行的线索,这个线索为线程。

每一个线程都会至少存在一个线程,Java程序启动时候,就会产生一个进程,这个进程会默认创建一个线程,就是main线程

一个进程开辟多个线程,每个线程是按照cpu分配的时间片执行

cpu选择一个可以执行的线程,把这个线程调度的cpu进行运行

运行完毕后,切换到下一个要运行的线程。刚才运行线程处于挂起状态

如果是多个cpu的服务器,可以同时运行多个线程,真正做到线程并发执行

二、多线程的好处

1、提高程序运行效率

2、充分利用cpu资源

3、可以并发的执行

三、创建线程

1)、继承Thread类

Thread类用来实现多线程

创建第一个线程:

//定义一个继承Thread线程类的子类
public class Test01 extends Thread{
    //创建构造方法
    //参数,线程名字
    public Test01(String name) {
        super(name);
    }
//重写Thread类的run方法,里面定义了线程Test01运行的代码,所有该线程完成的功能代码,都写在这个run方法中
    @Override
    public void run() {
        int i =0;
        while (i++<5){
            System.out.println(Thread.currentThread().getName()+"的run方法在运行");
        }
    }
​
    public static void main(String[] args) {
        //创建实例
        Test01 test01 = new Test01("test01");
        //启动线程:调用start方法
        test01.start();//让当前线程处于就绪状态,随时可以运行状态,但是具体看cpu
    }
}

2)、实现Runnable接口

继承Thread类,Java是单继承。

创建实现Runnable接口的线程

//实现Runnable接口
public class Test02 implements Runnable{
​
    //重写run方法
    @Override
    public void run() {
        int i =0;
        while (i++<5){
            System.out.println(Thread.currentThread().getName()+"的run方法在运行");
        }
    }
​
    public static void main(String[] args) {
        //创建Runnable接口实现类的实例对象,实例化线程类
        Test02 test02 = new Test02();
​
        //创建Thread类Thread(Runnable target,String name)构造方法创建线程对象
        Thread thread = new Thread(test02,"thread");
        //调用线程对象start()方法启动线程
        thread.start();
        //创建Thread1线程对象
        Thread thread1 = new Thread(test02,"thread1");
        thread1.start();
​
    }
}

3)、实现Callable接口

因为继承Thread类和实现Runnable接口,重写run方法,run方法不提供返回值

JDK1.5开始提供

A、创建Callable接口的实现类,同时重写Callable接口的call方法

B、创建Callable接口的实现类对象 new Callable接口的实现类

C、通过FutureTask线程结果处理类的有参构造方法来封装Callable接口类实现对象

D、使用参数为FutureTask类对象的Thread有参构造方法创建Thread线程的实例

E、调用线程实例的start方法启动线程

创建线程

//实现Callable接口
public class Test03 implements Callable<Object> {
    //重写Callable的call方法
    @Override
    public Object call() throws Exception {
        int i =0;
        while (i++<5){
            System.out.println(Thread.currentThread().getName()+"的run方法在运行");
        }
        return i;
    }
​
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建Callable接口实现对象
        Test03 test03 = new Test03();
        //使用FutureTask封装Callable接口,用来处理返回值
        FutureTask<Object> future = new FutureTask<Object>(test03);
​
        //Thread thread = new Thread(future,"test03");
        //FutureTask是Runnable接口的一个子接口构造方法创建对象
        Thread thread = new Thread(future,"test03");
        thread.start();
        Object o = future.get();
        System.out.println(o);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值