欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java多线程编程技术

程序员文章站 2024-02-16 10:26:40
...

start()与run()方法的区别

   start():该方法是在当前线程中启动一个新的线程,而新启动的线程会调用run()方法,同时该方法不能重复调用;

   run()  :该方法和普通的方法一样,可以重复执行,不会创建新的线程。

1.线程调用得随机性:

     创建一个自定义得线程类MyThread.java,此类继承自Thread,并且重写run方法。执行得代码如下:

/**
 * @author renhuifeng
 * @program: workThread->MyThread
 * @description: 线程的调用得随机性
 * @create: 2019-12-02 14:10
 **/
public class MyThread extends Thread{
    @Override
    public  void run(){
        super.run();
        System.out.println("Mythread");
    }
}

class Test{
    public static void main(String[] args) {
        MyThread th = new MyThread();
        th.start();
        System.out.println("运行结束!");

    }
}

java多线程编程技术

java多线程编程技术

总结:线程的再main方法n次不确定的调用输出结果得到了变化,证明线程调用时随机的。

 

2.演示过线程的调用的随机性后,演示线程的随机性

创建自定义线程类MyThread.java,代码如下:

package com.company;

/**
 * @author renhuifeng
 * @program: workThread->MyThread
 * @description: 线程执行的随机性
 * @create: 2019-12-02 14:10
 **/
public class MyThread extends Thread{
    @Override
    public  void run(){
        for(int i =0;i<10;i++){
            int time = (int) (Math.random()*1000);
            try {
                Thread.sleep(time);
                System.out.println("run=" +Thread.currentThread().getName());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Test{
    public static void main(String[] args) {
        MyThread th = new MyThread();
        th.setName("myThread");
        th.start();
        for(int i =0;i<10;i++){
            int time = (int) (Math.random()*1000);
            try {
                Thread.sleep(time);
                System.out.println("main=" +Thread.currentThread().getName());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

java多线程编程技术

在代码中,为了展现出线程具有随机特性,所以使用随机数的形式来使线程挂起的效果,从而表现出cpu执行哪个线程具有不确定性。

       Thread.java 类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中run()方法,也就是使xain'cehng得到运行,启动线程,具有异步执行的效果。如果调用代码thread.run()就不是异步执行了,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中代码执行完后才可以执行后面的代码。

另外注意是,执行start()方法的顺序不代表线程启动的顺序,创建测试代码如下:

public class MyThread extends Thread{
    private int i;

    public MyThread(int i) {
        this.i = i;
    }

    @Override
    public  void run(){
        System.out.println(i);
    }
}

class Test{
    public static void main(String[] args) {
        MyThread th1 = new MyThread(1);
        MyThread th2 = new MyThread(2);
        MyThread th3 = new MyThread(3);
        MyThread th4 = new MyThread(4);
        MyThread th5 = new MyThread(5);
        MyThread th6 = new MyThread(6);
        MyThread th7 = new MyThread(7);
        MyThread th8 = new MyThread(8);
        MyThread th9 = new MyThread(9);
        MyThread th10 = new MyThread(10);
        th1.start();
        th2.start();
        th3.start();
        th4.start();
        th5.start();
        th6.start();
        th7.start();
        th8.start();
        th9.start();
        th10.start();



    }
}

执行结果:

java多线程编程技术

 

相关标签: Thread