Java基础多线程之线程创建


都知道要实现多线程有两种方法1、继承自Thread类 2、实现Runnable接口

前者很好理解,你想拥有某种性质就简单的办法就是继承它。比如你想很有钱,最简单的办法就是你爸是李刚!

由于java是单继承,但这种方法浪费了唯一的宝贵的一个继承的机会,显得很不划算。于是出现了第二种实现

多线程的方法-----实现Runnable接口。这种方式,就显得不那么直接了。我不禁去想,为什么会那么奇妙呢?

这里面有包含什么样的设计理念呢?这后面隐含了什么原理呢?我的思考与理解如下:

Thread类就像一个工厂,他可以制造家具,我们如果想制造家具,有两种方法:


一是,自己也学着造一个同样的工厂,在自己的厂里面制造家具。这就相当于把我们的类继承Thread线程,创建多线程。

二是,我们自己不用开厂,让Thread厂给我们代加工。工厂贴出告示说可以加工一种叫Runnable的木材(Thread构造方法可以接收Runnable参数),

然后我们就拿着自己的Runnable木材到工厂,让工厂给代加工,制造家具。我将这种方式我称为代加工模式。这样是不是很爽?自己想要的家具别人帮忙

制造了。自己可以自由选择开别的厂(继承其他的类)。代加工能实现的前提条件是:Thread工厂可以加工Runnable木材,而你自己也有能被Thread工厂加工的

Runnable木材。

两种创建线程的方式示例代码:

/*
创建线程方式一:继承Thread类。
步骤:
1,定义一个类继承Thread类。
2,覆盖Thread类中的run方法。
3,直接创建Thread的子类对象创建线程。
4,调用start方法开启线程并调用线程的任务run方法执行。



可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)

主线程的名字就是main。
*/

class Demo extends Thread
{
	private String name;
	Demo(String name)
	{
		super(name);
		//this.name = name;
	}
	public void run()
	{
		for(int x=0; x<10; x++)
		{
			//for(int y=-9999999; y<999999999; y++){}
			System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
		}
	}
}




class ThreadDemo2 
{
	public static void main(String[] args) 
	{

		/*
		创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。
		
		而运行的指定代码就是这个执行路径的任务。

		jvm创建的主线程的任务都定义在了主函数中。

		而自定义的线程它的任务在哪儿呢?
		Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务的描述。
		这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的函数。
		
		run方法中定义就是线程要运行的任务代码。

		开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法。
		将运行的代码定义在run方法中即可。 


		*/
//
//		Thread t1 = new Thread();

		Demo d1 = new Demo("旺财");
		Demo d2 = new Demo("xiaoqiang");
		d1.start();//开启线程,调用run方法。		
		d2.start();
		System.out.println("over...."+Thread.currentThread().getName());
	}
}
//调用run和调用start有什么区别?
package test;

/**
 *  创建线程实现方式二、实现Runnable接口
 *  需求:简单的卖票程序,多窗口同时卖票
 *  步骤:
 *  1、定义类实现 Runnbale接口
 *  2、覆盖run方法。将多线程要运行的方法放到 run方法中
 *  3、通过Thread类创建多线程对象。
 *  4、将Runnable接口的子对象作为实际参数传给Thread类
 *  5、调用Thread类的start方法开启线程,(会自己调用run方法)
 *  
 *  Runnable方式的好处:
 *  1、解决了java不能多继承的问题
 *  2、很好地将票的资源作为共享资源传入到多个线程。
 */
public class RunnableTest {
	public static void main(String[] args) {
		
		Ticket t = new Ticket();
		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();
	}
}

class Ticket implements Runnable{
	private int ticket = 100;

	public void run() {
		while(true){
			if(ticket >0 ){
				System.out.println(Thread.currentThread().getName()+"买出:"+ticket--);
			}
		}
	}
}}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值