创建线程的两种方式

创建线程的第一种方式:

  1. 创建一个类继承Thread
  2. 重写Thread中的run方法 (创建线程是为了执行任务 任务代码必须有存储位置,run方法就是任务代码的存储位置。
  3. 创建子类对象,其实就是在创建线程
  4. 启动线程start()

这种方式的特点(缺陷):线程任务和线程是绑定在一起的。

四个窗口同时卖票

因为是同时,所以使用多线程。

创建四个线程,都是卖票。

因为都是卖票,所以四个线程的任务是一样的。

只需要定义一个类继承Thread。

class Ticket extends Thread
{
	private static int num = 50; //定义成static,四个线程共享50张票。
	public void run()
	{
		while(num>0)
		System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
	}
}

class Maipiao
{
	public static void main(String[] args) 
	{
		Ticket win1 = new Ticket();
		Ticket win2 = new Ticket();
		Ticket win3 = new Ticket();
		Ticket win4 = new Ticket();

		win1.start();
		win2.start();
		win3.start();
		win4.start();
	}
}


为了解决四个线程共享票的问题,需要使用创建线程的第二种方式:

  1. 创建实现了Runnable接口的子类
  2. 重写Runnable接口中的run方法
  3. 创建实现了Runnable接口的子类的对象
  4. 创建Thread类的对象,也就是在创建线程
  5. 把实现了Runnable接口的子类对象作为参数传递给Thread类的构造方法

这种方式的特点是:把线程任务进行了描述,也就是面向对象,从而实现了线程任务和线程对象的分离。线程执行什么任务不再重要,只要是实现了Runnable接口的子类对象都可以作为参数传递给Thread的构造方法,此方式较为灵活。

第二种方式还有一个好处是实现接口了,还不影响继承其他父类。

//这个类只是为了描述线程的任务,跟线程没有任何关系。
class Ticket implements Runnable
{
	private int num = 50; 
	public void run()
	{
		while(num>0)
		System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
	}
}

class Maipiao
{
	public static void main(String[] args) 
	{
		Ticket t = new Ticket();
	    
		Thread win1 = new Thread(t);
		Thread win2 = new Thread(t);
		Thread win3 = new Thread(t);
		Thread win4 = new Thread(t);

		win1.start();
		win2.start();
		win3.start();
		win4.start();
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值