Java多线程

多线程即在同一时间,同事处理多个事件。创建多线程方式有:继承线程类,实现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方法
就可以观察到 运行效果:

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值