线程与进程学习002

1.2.4执行start()的顺序不代表执行run()的顺序
注意,执行start()方法的顺序不代表线程启动的顺序。创建测试用的项目如下:

package extthread;

public class MyThread extends Thread {
    
    
	private int i;

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

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

}

运行类Test.java代码如下:

package test;

import extthread.MyThread;;

public class Test {
    
    
	public static void main(String[] args) {
    
    
		final MyThread t11 = new MyThread(1);
		final MyThread t12 = new MyThread(2);
		final MyThread t13 = new MyThread(3);
		final MyThread t14 = new MyThread(4);
		final MyThread t15 = new MyThread(5);
		final MyThread t16 = new MyThread(6);
		final MyThread t17 = new MyThread(7);
		final MyThread t18 = new MyThread(8);
		final MyThread t19 = new MyThread(9);
		final MyThread t110 = new MyThread(10);
		final MyThread t111 = new MyThread(11);
		final MyThread t112 = new MyThread(12);
		final MyThread t113 = new MyThread(13);
		
		t11.start();
		t12.start();
		t13.start();
		t14.start();
		t15.start();
		t16.start();
		t17.start();
		t18.start();
		t19.start();
		t110.start();
		t111.start();
		t112.start();
		t113.start();
	}
}

程序运行的结果如下图所示:
在这里插入图片描述
使用代码

MyThread thread = new MyThread();
thread.start();

启动一个线程后,JVM直接调用MyThread.java 类中的run()方法。

1.2.5实现Runnable接口

如果想创建的线程类已经有了一个父类了,就不能再及程序继承自Thread类,因为java不支持多继承,所以需要实现Runnable接口来结局这样的情况。创建代码来实现:

package myrunnable;

public class MyRunnable implements Runnable {
    
    

	@Override
	public void run() {
    
    
		System.out.println("运行中");
	}
}

如何使用这个MyRunnable.java类呢?这个就要看一下Thread.java的构造函数了,如下图所示
在这里插入图片描述
在Thread.java类的8个构造函数中,有5个可以传入Runnable接口,为了说明构造函数支持传入一个Runnable接口的对象,运行如下类代码:

package myrunnable;

public class Run {
    
    
	public static void main(String[] args) {
    
    
		Runnable runnable = (Runnable) new MyRunnable();
		Thread thread = new Thread(runnable);
		thread.start();
		System.out.println("运行结束!");
	}
}

运行结果如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_55284524/article/details/115035569