zoukankan      html  css  js  c++  java
  • Java多线程的创建(一)

    • 方法一:继承Thread类实现

      1.创建一个类A,并继承Thread类

      2.重写A的run()方法

      3.创建A的实例对象b,即创建了线程对象

      4.使用b调用start()方法:启动线程(会自动调用run方法)


    例如:

    package 多线程;
    /*
    *1.创建两个线程分别完成100以内奇数偶数的输出
    */
    
    public class CreateThread {
        public static void main(String[] args){
            Test1 t1 = new Test1();
            Test2 t2 = new Test2();
            t1.start();
            t2.start();
        }
    }
    //输出偶数
    class Test1 extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                if (i % 2 == 0) {
                    System.out.println("线程一输出偶数:"+i);
                }
            }
        }
    }
    
    //输出奇数
    class Test2 extends Thread{
        @Override
        public void run() {
            for(int i =0; i < 50;i++){
                if (i %2 != 0) {
                    System.out.println("线程二输出奇数:"+i);
                }
            }
        }
    }
    线程一输出偶数:0
    线程一输出偶数:2
    线程一输出偶数:4
    线程二输出奇数:1
    线程二输出奇数:3
    线程二输出奇数:5
    	....
    线程二输出奇数:47
    线程二输出奇数:49
    线程一输出偶数:6
    线程一输出偶数:8
    

    输出结果省略了一部分,可以看出来,两个线程的执行是交替的,所以奇数和偶数也是交替输出.


    • 方法二:实现Runnable接口

      1. 定义子类A,实现Runnable接口。

      2. 子类中重写Runnable接口中的run方法。

      3. 通过Thread类含参构造器创建线程对象。

      4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

      5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。


    例如:

    package 多线程;
    
    public class CreateThread2 {
        public static void main(String[] args){
           Test3 t3 = new Test3();
           Test4 t4 = new Test4();
    
            //多态性
           Thread t = new Thread(t3);
           Thread tt = new Thread(t4);
           t.start();
           tt.start();
        }
    }
    //输出偶数
    class Test3 implements Runnable{
        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                if (i % 2 == 0) {
                    System.out.println("线程一输出偶数:"+i);
                }
            }
        }
    }
    //输出奇数
    class Test4 implements Runnable{
        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                if (i % 2 != 0) {
                    System.out.println("线程二输出奇数:"+i);
                }
            }
        }
    }
    //结果和上一个类似
    
    • 注意事项

      1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。

      2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。

      3. 想要启动多线程,必须调用start方法。

      4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将出现异常。

    • 比较两种方法

      1.继承Thread:线程代码存放Thread子类run方法中。

      2.实现Runnable:线程代码存在接口的子类的run方法。

      3.实现方式的好处:

      ​ ①避免了单继承的局限性

      ​ ②多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源

    • 说在最后

      码字不易,感谢支持。水平有限,难免错漏和不准确,欢迎批评指正!

  • 相关阅读:
    button标签和input button
    获取select标签的值
    window.loaction和window.location.herf
    数组重复计数,对象方法
    js对象详解
    面试经典题型整理
    一些js小知识点整理
    事件委托能够优化js性能
    网页加载的一般顺序
    http状态码
  • 原文地址:https://www.cnblogs.com/coding-996/p/12104570.html
Copyright © 2011-2022 走看看