两种实现多线程的方式 迅雷案列

Thread多线程类

继承Thread类使子类有多线程的能力
1.子类需要重写run()方法

  • 重要,run()里面是子线程的重要实现过程
    东西的案列
package 第一种;

public class Thunder extends Thread{
     
	

	@Override
	public void run() {
     //继承Thread需要重写run()方法
		// TODO Auto-generated method stub
		for(int i=1;i<101;i++) {
     
			System.out.println(Thread.currentThread().getName()+"下载进度:"+i+"%");//使用这种只能是默认的名字或者在a.star()之前设置名字
			try {
     
				Thread.sleep(50);//没个子线程的休眠时间及时间片
			} catch (InterruptedException e) {
     
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
	}
	

}

测试类
package 第一种;

public class ThunderTest {

public static void main(String[] args) throws InterruptedException {
	// TODO Auto-generated method stub
	System.out.println("我是主线程");
	Thread s=Thread.currentThread();
	boolean sk=s.isDaemon();//判断主函数是否是守护程序
	System.out.println(sk);
	Thunder a=new Thunder();
	Thunder a1=new Thunder();
	Thunder a2=new Thunder();
	Thunder a3=new Thunder();
	a.setName("复仇者联盟");
	a.start();
	a1.setName("复仇者联盟2");
	a1.start();
	a2.setName("复仇者联盟3");
	a2.start();
	a3.setName("复仇者联盟4");
	a3.start();

}
/*

复仇者联盟2下载进度:1%
.。。。。
。。
复仇者联盟4下载进度:92%
复仇者联盟下载进度:92%
复仇者联盟2下载进度:93%
复仇者联盟3下载进度:93%
复仇者联盟4下载进度:93%
复仇者联盟下载进度:93%
复仇者联盟3下载进度:94%
复仇者联盟2下载进度:94%
复仇者联盟4下载进度:94%
复仇者联盟下载进度:94%
复仇者联盟2下载进度:95%
复仇者联盟3下载进度:95%
复仇者联盟4下载进度:95%
复仇者联盟下载进度:95%
复仇者联盟3下载进度:96%
复仇者联盟2下载进度:96%
复仇者联盟4下载进度:96%
复仇者联盟下载进度:96%
复仇者联盟2下载进度:97%
复仇者联盟3下载进度:97%
复仇者联盟下载进度:97%
复仇者联盟4下载进度:97%
复仇者联盟3下载进度:98%
复仇者联盟2下载进度:98%
复仇者联盟4下载进度:98%
复仇者联盟下载进度:98%
复仇者联盟3下载进度:99%
复仇者联盟2下载进度:99%
复仇者联盟4下载进度:99%
复仇者联盟下载进度:99%
复仇者联盟4下载进度:100%
复仇者联盟2下载进度:100%
复仇者联盟3下载进度:100%
复仇者联盟下载进度:100%

*/

}

实现Runnable接口

  1. 增加程序的扩展性;在实现Runnable接口的同时;可以继承别的东西
package 第二种;
//实现是为了
public class Thunder implements Runnable {
     //实现接口

	@Override
	public void run() {
     
		// TODO Auto-generated method stub
		for(int i=1;i<101;i++) {
     
			System.out.println(Thread.currentThread().getName()+"下载进度:"+i+"%");
			try {
     
				Thread.sleep(1000);
			} catch (InterruptedException e) {
     
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

}

测试类

package 第二种;

public class RunableTest {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Thunder t=new Thunder();//只是由线程的能力
		//使用线程的能力包装下
		Thread t1=new Thread(t,"钢铁侠");//传参
		Thread t2=new Thread(t,"蜘蛛侠");//传参
		Thread t3=new Thread(t,"美国堆中");//传参
		Thread t4=new Thread(t,"海绵宝宝");//传参
		Thread t5=new Thread(t,"神奇女侠");//传参
		Thread t6=new Thread(t,"海王");//传参
		//只有这个类才由start方法 启动子线程的功能
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
		t6.start();
		

	}

}

练习 第二种方法好 这很灵活

package 第二种;

public class Thunder1 implements Runnable {
     

	@Override
	public void run() {
     
		// TODO Auto-generated method stub
		for(int i=1;i<101;i++) {
     
			System.out.println(Thread.currentThread().getName()+i+"%");
			try {
     
				Thread.sleep(500);
			} catch (InterruptedException e) {
     
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	

}

测试类

package 第二种;

public class Thunder1Test {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Thunder1 a=new Thunder1();
		Thread s1=new Thread(a,"钢铁侠");
		s1.start();
		Thread s2=new Thread(a,"绿巨人");
		s2.start();
		Thread s3=new Thread(a,"沐浴之王");
		s3.start();

	}

}
package 第二种1;

public class Thunder implements Runnable {
     

	@Override
	public void run() {
     
		// TODO Auto-generated method stub
		for(int i=1;i<101;i++) {
     
			System.out.println(Thread.currentThread().getName()+i+"%");
			try {
     
				Thread.sleep(5000);
			} catch (InterruptedException e) {
     
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

}
package 第二种1;

public class ThunDerTest {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Thunder a=new Thunder();
		Thread s1=new Thread(a,"哥谭市");
		Thread s2=new Thread(a,"经历");
		Thread s3=new Thread(a,"金刚狼");
		Thread s4=new Thread(a,"我是你爸");
		s1.start();
		s2.start();
		s3.start();
		s4.start();

	}

}

你可能感兴趣的:(多线程)