java并发-1 java多线程执行的两种方式

java多线程执行的两种方式:

1、继承Thread类,并覆盖其run方法;

2、实现Runnable接口,并实现其run方法;

 

第一种方式:

public class TestThread1 extends Thread {

    @Override
    public void run() {
       System.out.println("TestThread name :" + this.getName() + " start");
    }

    public static void main(String[] args) {
        Thread t1 = new TestThread1();
        Thread t2 = new TestThread1();
        Thread t3 = new TestThread1();
        t1.start();
        t2.start();
        t3.start();
    }
}

 Thread类的本质是实现了Runnable接口的一个实例,因此也就是一个线程实例;启动线程的唯一方式就是通过Thread.start();方法启动(单线程,不包括线程池);由于jvm是运行在操作系统之上的假象计算机,且java线程与操作系统原生线程具有直接映射关系,因此start方法是一个native方法,它将启动一个新线程实例,并调用run方法。

执行结果:

TestThread name :Thread-0 start
TestThread name :Thread-1 start
TestThread name :Thread-2 start

第二种方式:如果我们的类已经继承了父类又想实现多线程怎么办呢?此时应该实现Runnable接口,并实现其run方法:

public class TestThread2 implements Runnable {
    @Override
    public void run() {
        System.out.println("TestThread2 name " + Thread.currentThread().getName() + " start");
    }

    public static void main(String[] args) {
        /**
         * 这里相当于未开启多线程,而是普通的方式直接执行了run方法
         */
        new TestThread2().run();

        /**
         * 调用start方法使线程处于就绪状态,等待cpu时间分片,真正的多线程启动
         */
        Thread thread1 = new Thread(new TestThread2());
        thread1.start();
        Thread thread2 = new Thread(new TestThread2());
        thread2.start();
        Thread thread3 = new Thread(new TestThread2());
        thread3.start();
    }
}

注意:new TestThread2().run();方法并未开启多线程,只是以主线程的实例执行了普通的方法调用,单线程的启动的唯一方式就是调用Thread.start()方法,因此下面还需要创建Thread的实例,将TestThread2的实例传入,执行start方法就会自动调用实现了Runnable接口的TestThread2实例的run方法。

执行结果:

TestThread2 name main start
TestThread2 name Thread-0 start
TestThread2 name Thread-1 start
TestThread2 name Thread-2 start

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值