多线程即在同一时间,同事处理多个事件。创建多线程方式有:继承线程类,实现Runnable接口以及匿名类。
进程(Processor)和线程(Thread)的区别
进程:启动一个程序或运行一个某一类就叫一个进程。 接着又启动一个程序,这叫两个进程。
线程:线程是在进程内部同时做的事情,可以理解为在一个程序中,程序内部的各种活动及其功能的开启。这就是由多线程来实现的。
我们可以创建一个类
package wayne;
import java.io.Serializable;
public class Person{
public String name;
public float hp;
public int damage;
public void attackPerson(Person p) {
try {
//为了表示攻击需要时间,每次完成一次攻击,就会延迟1s
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p.hp-=damage;
//这里输出人每一次攻击的对象,以及自身血量的变化
System.out.format("%s 正在攻击 %s, %s的血变成了 %.0f%n",name,p.name,p.name,p.hp);
//判断中,如果执行了isDead()方法,则表示改对象已阵亡
if(p.isDead())
System.out.println(p.name +"死了!");
}
public boolean isDead() {
return 0>=hp?true:false;
}
}
package wayne;
public class TestThread {
public static void main(String[] args) {
Person hai = new Person();
hai.name = "战士1";
hai.hp = 900;
hai.damage = 150;
Person eddie = new Person();
eddie.name = "战士2";
eddie.hp = 400;
eddie.damage = 50;
Person she = new Person();
she.name = "骷髅王";
she.hp = 625;
she.damage = 105;
Person tidao = new Person();
tidao.name = "剃刀";
tidao.hp = 525;
tidao.damage = 180;
//战士1攻击了战士2
while(!eddie.isDead()){
hai.attackPerson(eddie);
}
//骷髅王攻击了剃刀
while(!tidao.isDead()){
she.attackPerson(tidao);
}
}
}
这样一来,他们的顺序为战士1与战士2运行结束之后,骷髅王才会与剃刀进行下一次运行。
接下来设计另一个线程类,使他们一起运行,进行攻击
package wayne;
public class KillThread extends Thread{
private Person p1;
private Person p2;
//这里用到this 关键字
public KillThread(Person p1, Person p2){
this.p1 = p1;
this.p2 = p2;
}
public void run(){
while(!p2.isDead()){
p1.attackPerson(p2);
}
}
}
package wayne;
public class TestThread {
public static void main(String[] args) {
Person hai = new Person();
hai.name = "战士1";
hai.hp = 900;
hai.damage = 150;
Person eddie = new Person();
eddie.name = "战士2";
eddie.hp = 400;
eddie.damage = 50;
Person she = new Person();
she.name = "骷髅王";
she.hp = 625;
she.damage = 105;
Person tidao = new Person();
tidao.name = "剃刀";
tidao.hp = 525;
tidao.damage = 180;
KillThread killThread1 = new KillThread(hai,eddie);
killThread1.start();
KillThread killThread2 = new KillThread(she,tidao);
killThread2.start();
}
}
使用多线程,就可以做到多事件同时运行。
设计一个类KillThread 继承Thread,并且重写run方法
并实例化对象,调用其start方法
就可以观察到 运行效果: