问题一:多线程是什么?
一个程序可能包括多个并发执行的任务,线程指其中一个任务从头到尾的执行流。简单来说,多线程就是在一个程序中提供并发执行多个任务。
问题二:什么时候才要用到多线程?
简单来说,就是当你的程序要在同一时间执行多个任务的时候就要用到多线程。例如:经典的飞机游戏、坦克游戏中,敌人的飞机坦克和玩家的飞机坦克就由不同线程来控制他们的行动。(动态画面的制作也能用多线程实现)
问题三:如何使用创建和使用线程?
Java提供线程类Thread以完成线程的基本功能:新建、运行、中止、阻塞、唤醒等。
红色标记的为常用方法
以下是Thread类:
+Thread() //创建一个空线程
+Thread(task: Runnable) //为指定任务创建一个线程
+start(): void
//启动线程使方法run()被JVM调用
+isAlive(): boolean
//测试线程当前是否正在运行
+setPriority(int): void
//设置线程的优先级p(范围从1到10)
+join():void
//等待当前线程结束(阻塞方法)
+sleep(millis:long): void //使线程睡眠指定时间
+yield(): void
//使线程暂停并允许其他线程执行
+interrupt(): void //中断线程
创建执行线程的两种方法:
1:
class tThread implements Runnable{
public void run(){}
}
Thread t = new Thread(new tThread());
t.start();
2:
class tThread extends Thread{
public void run(){}
}
tThread t = new tThread();
t.start();
例子:
下面给出一个程序创建两个任务以及使用线程并发执行这两个任务:
public class TestThread {
public static void main(String[] args) {
//新建TestThread实例
TestThread tt = new TestThread();
//创建两任务以及对应线程
Thread printA = new Thread(tt.new PrintA(1000));
Thread printB = new Thread(tt.new PrintB(1000));
//运行线程
printA.start();
printB.start();
}
class PrintA implements Runnable{
int times =0;
PrintA( int times){
this.times =times;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<times;i++){
System. out.println("AAAAAAAAAA" );
}
}
}
class PrintB implements Runnable{
int times =0;
PrintB( int times){
this.times =times;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<times;i++){
System. out.println("BBBBBBBBBB" );
}
}
}
}
第一个任务:打印1000行"AAAAAAAAAA"
第二个任务:打印1000行"BBBBBBBBBB"
运行此程序,两个线程共享CPU,在控制台上轮流打印A、B
此例子仅演示线程的创建和执行,其他常用方法可自行实验。