当前位置:主页 > 软件编程 > JAVA代码 >

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

时间:2020-11-11 11:50:01 | 栏目:JAVA代码 | 点击:

实现方式和继承方式有什么区别呢?

*区别:

*继承Thread:线程代码存放在Thread子类run方法中

*实现Runnable:线程代码存放在接口的子类的run方法中

*实现方式的好处:避免了单继承的局限性

*在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程

*注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws

*Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchronized(对象){需要同步的代码}

*同步的前提:

*1.有2个及以上的线程

*2.多个线程使用用一个锁(对象)

*同步的好处:解决了多线程的安全问题

*同步的弊端:多个线程需要判断锁,较为消耗资源

package 多线程;

class Ticket implements Runnable
{
//	private static int tick = 100;
	private int tick=100;
	Object obj = new Object();//??建一???ο蠡蛘咦约褐匦滦匆桓隼嗬创唇ㄒ桓龆韵笙旅嫱?步关键字需要用到
	@Override
	public void run() 
	{
		while(true)
		{
			synchronized(obj)
//			synchronized(this)
			{
			if(tick>0){
				try {Thread.sleep(10);} catch (Exception e) {	}
				System.out.println(Thread.currentThread().getName()+"...?N售:"+(tick--)+"号票");
//				tick--;
			}else {
				break;
			}
			}
		}
	}
	
}
public class Test 
{
	public static void main(String[] args) 
	{
		Ticket t = new Ticket();//创建一个实现了Runnable接口的类
		
		//创建4个多线程对象并传递上面接口对象给其构造方法
		Thread t1 = new Thread(t);//创建了一个线程
		Thread t2 = new Thread(t);//创建了一个线程
		Thread t3 = new Thread(t);//创建了一个线程
		Thread t4 = new Thread(t);//创建了一个线程
		
		//开启线程
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

您可能感兴趣的文章:

相关文章