Java之多线程学习(一)


      在Java中,可以通过实现Runnable接口或继承Thread类这两种方式来创建线程。那么这两种方式有什么区别呢?为了说明这两种方法的区别,我们设计了一组实验。通过实验得到的结果,来对这两种不同的方法进行对比。

      首先,创建了两个类:RunnableTest类和ThreadTest类。这两个类分别实现了Runnable接口及继承了Thread类。

 

class RunnableTest implements Runnable
{
	private int count=0;

	@Override
	public void run()
	{
		while(this.count < 10)
		{
			this.count ++;
			System.out.print(Thread.currentThread().getName()+ ":"  + this.count + " ");
		}
	}
}

class ThreadTest extends Thread
{
	private int count = 0;
	
	public void run()
	{
		while(this.count<10)
		{
			this.count ++;
			System.out.print(Thread.currentThread().getName() + ":" + this.count + " ");
		}
		
	}
	
}


 我们另外定义一个类RunnableAndThreadTest,并在该类中实现main()函数,来对刚才创建的这两个类进行测试。

测试一:

public class RunnableAndThreadTest
{

	public static void main(String[] args)
	{
		RunnableTest runnableTest1 = new RunnableTest();
		RunnableTest runnableTest2 = new RunnableTest();
		
		Thread thread1 = new Thread(runnableTest1);
		Thread thread2 = new Thread(runnableTest2);
		
		thread1.start();
		thread2.start();
	}
}

实验结果:

Thread-1:1 Thread-0:1 Thread-1:2 Thread-0:2 Thread-1:3 Thread-0:3 Thread-1:4 Thread-0:4 Thread-1:5 Thread-0:5 Thread-0:6 Thread-0:7 Thread-1:6 Thread-0:8 Thread-1:7 Thread-0:9 Thread-1:8 Thread-0:10 Thread-1:9 Thread-1:10

 

测试二:

public class RunnableAndThreadTest
{

	public static void main(String[] args)
	{
		RunnableTest runnableTest1 = new RunnableTest();
//		RunnableTest runnableTest2 = new RunnableTest();
		
		Thread thread1 = new Thread(runnableTest1);
		Thread thread2 = new Thread(runnableTest1);
		
		thread1.start();
		thread2.start();
	}
}

实验结果:

Thread-0:2 Thread-1:2 Thread-0:3 Thread-1:4 Thread-0:5 Thread-1:6 Thread-0:7 Thread-1:8 Thread-0:9 Thread-1:10

 

测试三:

public class RunnableAndThreadTest
{

 public static void main(String[] args)
 {
  ThreadTest threadTest1 = new ThreadTest();
  ThreadTest threadTest2 = new ThreadTest();
  
  threadTest1.start();
  threadTest2.start();
 }
}


实验结果:

Thread-0:1 Thread-1:1 Thread-0:2 Thread-1:2 Thread-0:3 Thread-1:3 Thread-0:4 Thread-1:4 Thread-0:5 Thread-1:5 Thread-1:6 Thread-1:7 Thread-1:8 Thread-1:9 Thread-1:10 Thread-0:6 Thread-0:7 Thread-0:8 Thread-0:9 Thread-0:10

 

结论:
1>如果某一个类实现了Runnable接口,那么这个类实际上是一个任务类。这个任务类的某一个对象可以使用多个线程进行包装,在这种情况下将会有多个线程来共同执行这个任务。

2>如果一个类继承了Thread类,那么这个类的对象就已经是一个线程,无法实现使用多个线程执行同一个任务。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值