0
点赞
收藏
分享

微信扫一扫

Java线程详细教程

编程练习生J 2022-04-23 阅读 58

一.线程创建

线程基础知识介绍

什么是线程?为什么要使用线程?

在没有使用到线程的程序中,我们总是只能串行的执行程序,也就是我们的程序一次性只能进行一个操作。而我们使用微信进行视频聊天的时候,我们可以一边视频,一边和其他人打字聊天。这就是多线程,可以一个线程负责视频聊天,一个线程负责打字聊天,使用的任然是一个程序。在日常使用场景中,多线程是必要的。

创建方法一:继承Thread类

Thread单词意思就是线程的意思,是Java提供的一个线程类。可以自己创建一个类然后继承Thread,重写run方法。run方法写入你想要进行多线程运行的代码。

通过你建的类,实例化一个对象;通过这个对象调用start()方法,该对象就可以进行多线程操作了。

创建步骤:

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

2.实例化一个对象,调用start方法(就是执行run函数里面的内容)

代码演示:

//1 创建两个类,继承Thread,都重写run方法
class Thread1 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Thread1 running!");
        }
    }
}

class Thread2 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Thread2 running!");
        }
    }
}

//2 对这两个类分别实例化一个对象,调用start方法
public class Demo1 {
    public static void main(String[] args) {
        Thread1 thread1 = new Thread1();
        Thread2 thread2 = new Thread2();

        thread1.start();
        thread2.start();
    }
}

运行结果发现,Thread1线程和Thread2线程轮流上处理机执行,由此可知该段程序确实实现了多线程操作 

创建方法二:实现Runnable接口

Runnable是一个接口,该接口是一个函数式接口(不知道函数式接口的伙伴,可以看看我上一篇博客哦),只有一个抽象方法run

创建方法一的Thread类就是实现了Runnable接口,查看源码如下图:

那为什么已经有Java开发人员已经给我们封装好的Thread类,有更多的方法可以供我们调用,我们还要用Runnable接口来实现线程,不是很冗余嘛,容我卖个关子,会在代码中解释。

创建步骤:

1 创建一个类实现Runnable接口,重写run方法

2 通过该类实例化对象

3 将实例化的对象作为参数传到Thread实现线程,再调用start方法

//1 创建Demo1实现Runnable接口,重写run方法
public class Demo1 implements Runnable{
    //run方法模拟买票场景
    int ticket = 10; //设置票数为10
    @Override
    public void run() {
        // 只要票数有剩余,就可以一直进行买票
        while (ticket > 0){
            // Thread.currentThread()该静态方法可以获得当前运行的线程 getName()得到线程名称
            System.out.println(Thread.currentThread().getName() + "   get   " +ticket--);
        }
    }
    public static void main(String[] args) {
        //2 实例化一个demo1对象
        Demo1 demo1 = new Demo1();
        //3 将实例化的对象作为参数传到Thread实现线程
        //Thread有传入一个对象的构造器,构造器还能加入线程的名称
        //实例化了多个Thread类,再调用start方法,就能实现多个线程对同一个对象进行操作
        //这就是为什么还要用Runnable接口来实现线程的原因
        new Thread(demo1,"pp").start();
        new Thread(demo1,"mc").start();
        new Thread(demo1,"pp1").start();
        new Thread(demo1,"mc1").start();
    }
}

上面代码用到的构造器: 

 

细心的伙伴在运行代码的时候会发现,票数可能出现负数的情况,这是明显的异常,原因是多个线程买了同一张票,为了解决这个问题,需要用到线程同步的知识,将在后续章节介绍。

创建方法三:实现Callable接口

二.线程状态

三.线程优先级

四.用户线程,守护线程

五.线程同步

六.线程池

举报

相关推荐

0 条评论