首先对线程做个基本的解释
线程就是同时运行的多个流程,而其中的一个流程就是一个线程。
实现线程的方法
1、继承Thread类,此类就是一个独立的线程类
2、实现runnable接口,注意此类是可作为独立线程运行的类而并非独立线程的类。
线程运行时的状态如下:
阻塞状态
初始状态 ---- 可运行状态 ---------运行状态 ----终止状态
下面用一个最基本最常用的案例来演示下线程
兔子和乌龟的故事,把乌龟和兔子分别当做两个线程去处理,我用实现runnable接口的方法去演示
1、兔子
public class TuZi implements Runnable{
Thread wg;
@Override
public void run() { //重写run方法
Thread th = Thread.currentThread();
th.setName("兔子");
for (int i = 1; i <= 10; i++) {
try {
if (i==8) {
//兔子线程 等待乌龟线程终止 //在这里假设了兔子去等待乌龟
wg.join();
}
th.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(th.getName() + "跑了"+(i*10)+"米");
}
}
}
2、乌龟
public class WuGui implements Runnable{
Thread tz;
@Override
public void run() {
Thread th = Thread.currentThread();
th.setName("乌龟");
for (int i = 1; i <= 10; i++) {
try {
if (i == 8) {
tz.join(5000);
}
th.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(th.getName() + "跑了"+(i*10)+"米");
}
}
}
测试线程
public class TestSaiPao {
public static void main(String[] args) {
WuGui wg = new WuGui();
TuZi tz = new TuZi();
//给乌龟和兔子 各一个线程
Thread th_wg = new Thread(wg);
Thread th_tz = new Thread(tz);
tz.wg = th_wg;
wg.tz = th_tz;
//启动两个线程
th_wg.start();
th_tz.start();
}
}
写完演示说几个名词
1、sleep,设置线程等待时间,缺点是特别不精确。会出现死锁。( 当多个线程进入 互相 等待的时候 此中状态就叫做死锁)
2、join,同样是设置线程等待时间,但是它可以设置线程等待的最长时间,防止出现死锁的情况。
3、wait,等待线程。
4、notyfy,唤醒正在等待的线程。
敬请各路大神多多指教。