Java多线程-37-多线程实现方式一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011541946/article/details/82026609

这篇开始学习线程相关代码知识,本篇开始介绍线程类Thread的基本使用方法,也就是通过调用start()方法去启动多线程。

1.API基本内容

在JDK API文档中,搜索并打开Thread类。可以发现Thread类在lang包下,所以不需要导入包。可以找到这么一句话:创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。本篇就来介绍第一种方法实现多线程。

2.执行Thread类的子类对象调用run方法,是真的实现了多线程吗?

一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。根据这句话,我们来写代码,就是先创建一个Thread类的子类实例对象,然后实例调用run方法,看看是不是实现了多线程。

package thread;

public class Demo1_Thread {

	public static void main(String[] args) {
		MyThread mt = new MyThread(); 		//4.创建Thread类子类对象
		mt.run();							//5.调用run方法
			
		for (int i = 0; i < 1000; i++) {		//6.添加第二个线程,作为参考
			System.out.println("bbbbb");
		}
	}
	
	
}

/**
 * 创建一个Thread类的子类,并重写run方法
 */
class MyThread extends Thread {				//1创建Thread类子类
	
	public void run() {						//2重写run方法
		//随便写一些代码
		for (int i = 0; i < 1000; i++) {		//3.将要执行的方法写在run方法中
			System.out.println("aaaaaaa");
		}
	}
	
}

运行之后,发现输出结果是,先全部输出aaaa,然后全部输出bbbb,并没有看到多线程的输出效果。因为如果是发生了多线程,肯定是输出aaaa和输出bbbb是交替的效果。为什么是这样效果呢,看来并没有实现多线程。继续看API文档,上面说,调用start()方法才执行多线程任务。

3.调用start()方法启动多线程执行

在API文档,下拉,找到start()方法。在start()方法上面可以看到sleep方法,这个我们在自动化测试中经常使用Thread.sleep(2000),这个线程等待。start()方法的作用是:使该线程开始执行;Java 虚拟机调用该线程的 run 方法。所以,触发多线程任务的方法是start()而不是run(),而且start()方法执行过程会自动调用run方法。修改代码如下:

package thread;

public class Demo1_Thread {

	public static void main(String[] args) {
		MyThread mt = new MyThread(); 		//4.创建Thread类子类对象
		mt.start();							//5.调用run方法
			
		for (int i = 0; i < 1000; i++) {		//6.添加第二个线程,作为参考
			System.out.println("bbbbb");
		}
	}
	
	
}

/**
 * 创建一个Thread类的子类,并重写run方法
 */
class MyThread extends Thread {				//1创建Thread类子类
	
	public void run() {						//2重写run方法
		//随便写一些代码
		for (int i = 0; i < 1000; i++) {		//3.将要执行的方法写在run方法中
			System.out.println("aaaaaaa");
		}
	}
	
}

运行上面代码之后,可以看到输出a和输出b是交替出现的,说明发生了多线程执行过程。这里需要注意,循环最好设置1000以上,才好看到交替打印效果,否则cpu执行太快,你都认为没有采用多线程执行。

猜你喜欢

转载自blog.csdn.net/u011541946/article/details/82026609