第一种方式–继承Thread类

步骤:

完成线程真正功能的代码放在类的run()方法中,当一个类继承Thread类后,就可以在该类中覆盖run()方法,将实现该线程功能的代码写入run()方法中,然后同时调用Thread类中的start()方法执行线程,也就是调用run()方法。

代码:

public class ThreadTest extends Thread{
	private int count=10;
	
	public void run() {
		while(true) {
			System.out.print(count+" ");
			if(--count==0) {
				return;
			}
		}
	}
	
	public static void main(String[] args) {
		new ThreadTest().start();
	}
}

在run()方法中为了避免无限循环,使用变量count递减为0作为跳出循环的条件。

第二种方式–实现Runnable接口

我们知道Java不允许多继承,如果程序员需要继承其他类(非Thread类),而且还要使用当前类实现多线程,那么就可以通过Runnable()接口来实现。

方式1:

这里不考虑继承其他类,创建一个类实现Runnable接口,覆盖run()方法,在main中实例化该类对象,通过上转型创建了Runnable对象,然后通过相应的构造方法创建Thread实例,并用start()方法启动线程。

代码1:

public class RunnableTest implements Runnable{
	private int count=10;
	
	public void run() {
		while(true) {
			System.out.print(count+" ");
			if(--count==0) {
				return;
			}
		}
	}
	
	public static void main(String[] args) {
		Runnable t1=new RunnableTest();
		Thread t2=new Thread(t1);
		t2.start();
		//上面的操作可以直省略为 new Thread(new RunnableTest()).start();
	}
}

方式2:

一般实现Runnable都是在匿名内部类中,我们可以使用匿名内部类将其作为参数传递给Thread构造器,并调用start()。

代码2:

public class RunnableTest2 {

	public static void main(String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("Hello world");
			}
		}).start();
	}
}

方式3:

和方式2一样,只不过使用了Java8引入的Lambda表达式,用起来很简洁。

代码3:

public class RunnableTest3 {
	//private static int count=10;
	public static void main(String[] args) {
		//简单输出一个hello world,当()->后面的表达式有多个时需要用{}括起来。
		new Thread(()->System.out.println("hello world")).start();
	}
}

以上就是我在学习过程中暂时掌握的几种方法的总结,第一次写博客没有经验,不会注意格式什么的。。。。