您的位置:首页 > 其它

线程的定义

2015-10-09 10:14 211 查看
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();
}

}
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程