java多线程实战(后续还会更新)

这是我写的一个简单的多线程应用。主要就是创建两个对象,一个是剑姬,一个是剑圣。通过extends Thread和implements Runable的方式创建线程。后续会加上继承其他接口的详细实现。


下图使用visual vm监控线程的结果,在代码中测了每个线程运行的时间,大概在10-30ms之间,然后对其进行休眠,最终得到的结果如下,你可能看到下面进行运行的时间为0,但是时间上没有采集到线程运行的时间,因为运行的时间太短了

  • 继承线程类 extands Thread

不共享资源 --创建多个线程将会执行每个进程(每个任务重复执行run中的内容,每个线程互不干扰)

  • 实现Runable接口 implements Runable

共享资源 --创建多个线程共享一个任务(即在处理run中任务时,多个线程会对run任务进行分工处理)

注意::线程中不允许用Thread.sleep(线程休眠之后处理会产生冲突)

image

具体代码实现如下:

package com.javabase.thread;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @des 多线程

* @author

* @date 2019/5/13 10:22

*/

public class MultiThread {

public static void main(String[] args) {

//剑姬

        Hero jj =new Hero();

        jj.setName("剑姬");

        jj.setHp(458f);

        jj.setType("ad");

        jj.setAttackPower(23f);

        jj.setAttackSpeed(1000l);

        //剑圣

        Hero js =new Hero();

        js.setName("剑圣");

        js.setHp(476f);

        js.setType("ad");

        js.setAttackPower(27f);

        js.setAttackSpeed(1200l);

        //thread

        new MyThread(jj,js).start();

        new MyThread(js,jj).start();

        //runable

        MyRunable jjAttackJs =new MyRunable(jj, js);

        MyRunable jsAttackJj =new MyRunable(js, jj);

        new Thread(jjAttackJs,"jjAttackJs,线程1").start();

        new Thread(jjAttackJs,"jjAttackJs,线程2").start();

        new Thread(jjAttackJs,"jjAttackJs,线程3").start();

        new Thread(jjAttackJs,"jjAttackJs,线程4").start();

        new Thread(jsAttackJj,"jsAttackJj").start();

    }

}

class MyRunableimplements Runnable {

private static final Loggerlogger = LoggerFactory.getLogger(MyRunable.class);

    Heroh1;

    Heroh2;

    public MyRunable(Hero h1, Hero h2) {

this.h1 = h1;

        this.h2 = h2;

    }

public void run() {

Common common =new Common();

        common.myRun(h1,h2);

    }

}

class MyThreadextends Thread {

private static final Loggerlogger = LoggerFactory.getLogger(MyRunable.class);

    Heroh1;

    Heroh2;

    public MyThread(Hero h1, Hero h2) {

this.h1 = h1;

        this.h2 = h2;

    }

public void run() {

Common common =new Common();

        common.myRun(h1,h2);

    }

}

class Common {

private static final Loggerlogger = LoggerFactory.getLogger(Common.class);

    static void myRun(Hero h1,Hero h2) {

while (h2.getHp() >0 && h1.getHp() >0) {

long startTime = System.currentTimeMillis();

//            long runtime = 0;

            logger.info("{}正在攻击{},---剩余血量:{}", h1.getName(), h2.getName(), h2.getHp());

            h2.setHp(h2.getHp() - h1.getAttackPower());

/*            try {

Thread.sleep(h1.getAttackSpeed()*10);

} catch (InterruptedException e) {

e.printStackTrace();

}*/

            logger.info("线程活动数:{}",Thread.activeCount());

            logger.info("运行时间:{}",System.currentTimeMillis()- startTime);

        }

if (h2.getHp() <0) {

logger.info("{}已经阵亡", h2.getName());

        }

}

}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,172评论 1赞 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,651评论 1赞 15
  • 一扩展javalangThread类二实现javalangRunnable接口三Thread和Runnable的区...
    和帅_db6a阅读 644评论 0赞 1
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 772评论 0赞 4
  • 【JAVA 线程】 线程 进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者...
    Rtia阅读 2,951评论 2赞 20

友情链接更多精彩内容