线程的定义
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类创建线程
2.通过实现Runnable接口创建线程
创建线程的实例代码:
为什么我们不直接调用run()方法而是调用start()方法启动线程呢?因为线程的运行需要本地操作系统的支持,直接调用run()方法和普通方法没什么区别的。
创建线程时这两种方法怎么选择?
1.线程中有资源的共享时,Runnable实现起来比较容易方便。
2.类继承了其他父类而不能继承Thread类时,使用Runnable。
用Runnable实现变量共享的例子:
@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(); } } } }
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- C#实现终止正在执行的线程
- Java线程编程中的主线程讲解
- 解析Java线程同步锁的选择方法