实现线程的两种方式
步骤:
完成线程真正功能的代码放在类的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();
}
}
以上就是我在学习过程中暂时掌握的几种方法的总结,第一次写博客没有经验,不会注意格式什么的。。。。