多线程(一)

 多线程——继承 Thread类

public class MyThreadDome extends Thread {

    public String threadName;

    public MyThreadDome(String threadName) {
        this.threadName = threadName;
    }

    /**
     * 多线程要执行的功能都在run()方法中定义
     */
    @Override
    public void run() { //多线程主体类

        for (int i = 0; i < 5 ; i++) {
            System.out.println("线程对象"+this.threadName+ " : " + i);
        }
    }
}

class Test{

    public static void main (String[] arge){


        /**
         * 多线程————继承 Thread 类 线程启动方法
         *
         *  实例化对象之后不能直接调用run()方法启动线程
         *
         *  通常通过调用线程类的 start() 方法使线程进入就绪状态,等待JVM来调度执行,JVM通过调用线程类的 run() 方法
         *
         *  完成实际操作, run() 方法结束后线程就会终止
         *
         *  而直接调用线程类的 run() 方法,并没有真正的启动线程,会被当做普通函数调用,由主函数调用 run() 是同步执行
         *
         *  无法达到多线程效果
         *
         */
//        new MyThreadDome("A").run();
        new MyThreadDome("A").start();
        new MyThreadDome("B").start();
        new MyThreadDome("C").start();

    }
}

多线程——实现 Runnable接口

public class MyRunnableDome implements Runnable {

    public String threadName;

    public MyRunnableDome(String threadName) {
        this.threadName = threadName;
    }

    /**
     * 多线程要执行的功能都在run()方法中定义
     */
    @Override
    public void run() { //多线程主体类

        for (int i = 0; i < 5 ; i++) {
            System.out.println("线程对象"+this.threadName+ " : " + i);
        }

    }

}
class Test_Two{

    public static void main (String[] arge){


        /**
         * 多线程————实现 Runable接口 线程启动方法
         *
         *  由于 Java 单继承特性,通常使用实现 Runnable接口 定义线程
         *
         *  由于不再继承 Thread父类 所以无法继续使用 Thread父类 中的 start() 方法
         *
         *  打开 Thread类 源码 得Thread构造器
         *
         *  public Thread(Runnable target) {
         *       init(null, target, "Thread-" + nextThreadNum(), 0);
         *  }
         *
         *  Thread类 通过构造器把Runnable对象保存起来
         *
         *  通过Thread类构造器 可以继续使用Thread类中的 stard() 方法启动线程
         *
         */
        new Thread(new MyRunnableDome("A")).start();
        new Thread(new MyRunnableDome("B")).start();
        new Thread(new MyRunnableDome("C")).start();

    }
}

 多线程——利用Lambda表达式定义线程

class LambdaDome{

    public static void main (String[] arge){
        /**
         * 从 JDK1.8 开始 Runnable接口 使用了函数式接口定义
         * 所以可以直接利用 Lambda 表达式进行线程类实现
         */
        for (int i = 0; i < 3; i++) {
            String threadName = "线程对象_"+i+" : ";
            Runnable run = ()->{
                for (int j = 0; j < 5 ; j++) {
                    System.out.println(threadName + j);
                }
            };
            new Thread(run).start();
        }
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值