1.判断线程是否启动
/**
* @author 曹飛龍
* 判断线程是否启动
*/
public class Test6 implements Runnable {
private int count = 5;// 假设当前还有5张票
@Override
public void run() {
while (count > 0) {
//System.out.println(Thread.currentThread().getName() + "买票" + count);
count--;
}
}
public static void main(String[] args) {
Test6 test = new Test6();
Thread td=new Thread(test,"窗口A");
System.out.println(td.isAlive());
td.start();
System.out.println(td.isAlive());
}
}
// 运行效果:
//false
//true
2.线程的强制执行
执行以下程序可以发现当主线程运行到5的时候主线程等待td 线程执行完之后才能执行
/**
* @author 曹飛龍
* 线程的强制执行
*/
public class Test7 implements Runnable {
private int count = 15;// 假设当前还有5张票
@Override
public void run() {
while (count > 0) {
System.out.println(Thread.currentThread().getName() + "买票" + count);
count--;
}
}
public static void main(String[] args) {
Test7 test = new Test7();
Thread td = new Thread(test, "窗口A");
td.start();
for (int i = 0; i < 10; i++) {
System.out.println("main 线程执行---"+i);
if (i == 5) {
try {
td.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
// 运行效果:
//main 线程执行---0
//窗口A买票15
//main 线程执行---1
//窗口A买票14
//main 线程执行---2
//窗口A买票13
//main 线程执行---3
//窗口A买票12
//main 线程执行---4
//窗口A买票11
//main 线程执行---5
//窗口A买票10
//窗口A买票9
//窗口A买票8
//窗口A买票7
//窗口A买票6
//窗口A买票5
//窗口A买票4
//窗口A买票3
//窗口A买票2
//窗口A买票1
//main 线程执行---6
//main 线程执行---7
//main 线程执行---8
//main 线程执行---9
3.线程的休眠
每次打印都间隔一秒钟
/**
* @author 曹飛龍
* 线程的休眠
*/
public class Test8 implements Runnable {
private int count = 5;// 假设当前还有5张票
@Override
public void run() {
while (count > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "买票" + count);
count--;
}
}
public static void main(String[] args) {
Test8 test = new Test8();
Thread td = new Thread(test, "窗口A");
td.start();
}
}
// 运行效果:
//窗口A买票5
//窗口A买票4
//窗口A买票3
//窗口A买票2
//窗口A买票1
4.线程的同步
之前我们做的一个用多个线程买票的程序是 发现有一个票被多次卖掉这个时候我们如果用了同步就不会出现那种情况
/**
* @author 曹飛龍 同步
*/
public class Test11 implements Runnable {
private int count = 5;// 假设当前还有5张票
@Override
public void run() {
pay();
}
//同步synchronized 用这个关键修饰
public synchronized void pay() {
while (count > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "买票"
+ count);
count--;
}
}
public static void main(String[] args) {
Test11 test = new Test11();
Thread td = new Thread(test, "窗口A");
Thread td1 = new Thread(test, "窗口B");
td1.start();
td.start();
}
}
// 运行效果:
//窗口B买票5
//窗口B买票4
//窗口B买票3
//窗口B买票2
//窗口B买票1