线程的定义

class  testClass{
	@Test
	public void test2() {
		// TODO Auto-generated method stub
		Bank bank = new Bank();
		bank.setMoney(300);
		bank.kuaiji.start();
		bank.chuna.start();

	}
}

在Java中创建线程有两种方法:继承Thread类或者实现Runnable接口

1、通过继承Thread类创建线程

<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;font-size:18px;">// 通过继承Thread类创建线程
class Thread1 extends Thread {
	Thread1() {

	}

	// 实现抽象类Thread的抽象方法方法
	public void run() {
		int i = 0;
		while (true) {
			System.out.println("Thread1:" + i++);
		}
	}
}</span></span>

2.通过实现Runnable接口创建线程
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;font-size:18px;">// 通过实现Runnable接口创建线程
class Thread2 implements Runnable {
	Thread2() {

	}

	// 实现接口Runnable的abstract方法
	public void run() {
		int i = 0;
		while (true) {
			System.out.println("Thread2:" + i++);
		}
	}

}</span></span>
不管使用哪种方法都要实现抽象方法run().

创建线程的实例代码:

<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;font-size:18px;">public class TestThread1 {
	@Test
	public void test() throws InterruptedException {
		Thread1 thr1 = new Thread1();
		Thread thr2 = new Thread(new Thread2());

		thr1.start();
		thr2.start();
	}

}</span></span>

为什么我们不直接调用run()方法而是调用start()方法启动线程呢?因为线程的运行需要本地操作系统的支持,直接调用run()方法和普通方法没什么区别的。


创建线程时这两种方法怎么选择?

1.线程中有资源的共享时,Runnable实现起来比较容易方便。

2.类继承了其他父类而不能继承Thread类时,使用Runnable。

用Runnable实现变量共享的例子:

<span style="font-family:FangSong_GB2312;font-size:18px;">
</span><pre name="code" class="java">class  testClass{
	@Test
	public void test2() {
		// TODO Auto-generated method stub
		Bank bank = new Bank();
		bank.setMoney(300);
		bank.kuaiji.start();
		bank.chuna.start();

	}
}

class Bank implements Runnable {
	private int money = 0; // kuaiji,chuna两个线程共享money
	Thread kuaiji, chuna; // 把两个线程定义为成员变量

	Bank() {
		kuaiji = new Thread(this);
		kuaiji.setName("kuaiji");
		chuna = new Thread(this);
		chuna.setName("chuna");
	}

	// 通过方法设置money的初值
	public void setMoney(int mount) {
		money = mount;
	}

	public void run() {
		while (true) {
			money = money - 50;
			if (Thread.currentThread() == kuaiji) {
				System.out.println("我是" + kuaiji.getName() + "现在有:" + money
						+ "元");
				if (money <= 150) {
					System.out.println(kuaiji.getName() + "进入死亡状态");
					return;
				}
			} else if (Thread.currentThread() == chuna) {
				System.out.println("我是" + chuna.getName() + "现在有:" + money
						+ "元");
				if (money <= 0)
					return;
			}

			try {
				Thread.sleep(800);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值