多线程1

多线程 1

方法一代码:

/**
 * 实现线程的第一种方式
 * 创建线程对象:new即可
 * 启动线程:调用线程对象的start方法
 */
public class TreadTest01 {
    public static void main(String[] args) {
        // 这里的代码属于主线程,在主栈中运行
        // 新建一个分支线程对象
        MyThread myThread = new MyThread();

//        myThread.run(); //这行代码不会启动线程,不会分配新的分支栈(单线程),普通的方法调用

        // 启动线程
        // start 方法的作用:启动一个分支线程,在 JVM 中开辟一个新的栈空间
        // 这段代码任务完成后瞬间就结束了,这段代码的任务只是为了开启一个新的栈空间,只要新的栈空间开出来,start方法就结束了,
        // 线程也就启动成功了。启动成功的线程会自动调用run方法,且run方法在分支栈的栈底部(压栈)
        // run方法在分支栈的地位类似于main方法在主栈的地位,run与main是平级的

        myThread.start(); // 瞬间结束
// 从这里开始并发
        // 这里的代码还是运行在主线程中
        for (int i = 0; i < 5; i++) {
            System.out.println("主线程---->" + i);
        }
    }
}

class MyThread extends Thread{
    @Override
    public void run() {
        // 在这里编写程序,这里的程序运行在分支栈中
        for (int i = 0; i < 10; i++) {
            System.out.println("分支线程--->" + i);
        }
    }
}

运行结果:

分支线程--->0
主线程---->0
分支线程--->1
主线程---->1
分支线程--->2
主线程---->2
分支线程--->3
主线程---->3
分支线程--->4
主线程---->4
分支线程--->5
分支线程--->6
分支线程--->7
分支线程--->8
分支线程--->9
  1. 由上面的结果可以看出,有两个线程在并发!
  2. 主线程结束后,分支线程还在执行

方法二代码:

/**
 * 实现线程的第二种方法
 */
public class ThreadTest02 {
    public static void main(String[] args) {

        MyThread2 mt  = new MyThread2();
        Thread t = new Thread(mt);
        // 启动线程
        t.start();
        for (int i = 0; i < 5; i++) {
            System.out.println("主线程---->" + i);
        }
    }
}

// 这并不是一个线程类,是一个可运行的类,它还不是一个线程
class MyThread2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("分支线程--->" + i);
        }
    }
}

运行结果:

分支线程--->0
分支线程--->1
主线程---->0
分支线程--->2
主线程---->1
分支线程--->3
分支线程--->4
分支线程--->5
分支线程--->6
分支线程--->7
分支线程--->8
主线程---->2
分支线程--->9
主线程---->3
主线程---->4

使用匿名内部类方式:

/**
 * 采用匿名内部类方式创建线程对象
 */
public class ThreadTest03 {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            // 支线程
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("分支线程--->" + i);
                }
            }
        });
        // 启动线程
        t.start();

        // 主线程
        for (int i = 0; i < 50; i++) {
            System.out.println("主线程--->" + i);
        }
    }
}

运行结果:

主线程--->0
分支线程--->0
主线程--->1
主线程--->2
主线程--->3
分支线程--->1
主线程--->4
分支线程--->2
分支线程--->3
分支线程--->4
分支线程--->5
分支线程--->6
分支线程--->7
分支线程--->8
分支线程--->9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值