多线程和单线程 打印数字到100000 的速度对比

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**

  • @author silence

  • 多线程和单线程 打印数字到100000 的速度对比
    */
    public class Demo2 {
    public static void main(String[] args) {
    //循环次数
    int number = 5000000;
    //单线程 耗时毫秒:3349 : 1000000
    // ontThread(number);

     //10条线程 耗时毫秒:4356tenThread(number);
    

    }

    /**

    • 多线程
    • @param number 循环次数
      */
      private static void tenThread(int number) {
      long start = System.currentTimeMillis();
      ThreadPoolExecutor thread = new ThreadPoolExecutor(
      //核心线程数
      10,
      //最大线程数
      10,
      //等待时间
      10,
      //等待单位
      TimeUnit.SECONDS,
      //排队阻塞队列
      new ArrayBlockingQueue<>(1),
      //线程工厂
      Executors.defaultThreadFactory(),
      //拒绝策略
      new ThreadPoolExecutor.AbortPolicy()
      );
      MyRunnable myRunnable = new MyRunnable(number);
      for (int i = 0; i < 10; i++) {
      thread.submit(myRunnable);
      }
      //结束线程池
      thread.shutdown();
      //一致在这里等多线程执行完毕,计算毫秒数
      while (true) {
      //等所有线程执行完,否则一直等
      if (thread.isTerminated()) {
      long end = System.currentTimeMillis();
      System.out.println(“耗时毫秒:” + (end - start));
      break;
      }
      }
      }

    //线程实现类
    static class MyRunnable implements Runnable {
    private static int count = 0;
    private int number;

     public MyRunnable() {}public MyRunnable(int number) {this.number = number;}@Overridepublic void run() {while (count < number) {
    

// System.out.print(Thread.currentThread().getName() + " = ");
System.out.println(count++);
}
}
}

/*** @param number 循环次数*/
private static void ontThread(int number) {long start = System.currentTimeMillis();int count = 0;for (; count < number; count++) {System.out.println(count);}long end = System.currentTimeMillis();System.out.println("耗时毫秒:" + (end - start) + " : " + count);}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

* IO流递归拷贝一个文件夹 按源文件夹格式拷贝

import java.io.*;/*** IO流递归拷贝一个文件夹 按源文件夹格式拷贝** author silence*/ public class IoCopy2 {private static int count 0;/*** 需要拷贝的起始地“文件夹路径”*/private static final File START new File("C:\\Users\\Administrator\\Desktop\\作…

图片查找

import java.io.*; import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.util.HashMap; import java.util.Properties;/*** 读取一个图片MD5&#xff0c;和文件夹里的所有…

Callable创建多线程

import java.util.concurrent.Callable;/*** author silence* Callable创建多线程* 创件一个类&#xff0c;实现 Callable 《》 这里填返回值类型* 重写call 方法。*/ public class MyCallable implements Callable<String> {Overridepublic String call() throws Exce…

继承Thread 创建多线程的简单实现

/*** 继承Thread 创建多线程的简单实现* author silence*/ public class MyThread extends Thread {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程对象名称System.out.print(getName() "----");System.out.println(i);}} } /** auth…

实现Runnable 创建多线程的简单实现

/*** 实现Runnable 创建多线程的简单实现** author silence*/ public class MyRunnable implements Runnable {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程名System.out.print(Thread.currentThread().getName() " ");System.out.p…

lambda表达式创建一条最简单的线程

/*** author silence*/ public class Demo1 {public static void main(String[] args) {new Thread(() -> {//打印线程名for (int i 0; i < 100; i) {System.out.println(Thread.currentThread().getName() " " i);}}).start();new Thread(() -> {//…

初学多线程使用中踩过的坑

wait使用&#xff0c;外面没有加synchronized &#xff0c;导致频繁报错。 IllegalMonitorStateException - 如果当前线程不是对象监视器的所有者报异常。 wait使用时会释放锁。并且使当前线程休眠&#xff0c;所以如果没有在synchronized 里面&#xff0c;没有获得锁。就会报错…

多线程线程池的基本创建,使用方法

import java.util.concurrent.*;/*** 多线程线程池的基本创建&#xff0c;使用方法** author silence*/ public class Silence {public static void main(String[] args) {//创建一个线程池 最大线程数量20 核心线程15//如果提交了超过15 不超过20的任务&#xff0c;会创建临时…

使用多线程拷贝文件夹

import java.io.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** 使用多线程拷贝文件夹* 不考虑目的地文件的唯一性。 不按源文件格…

javase 的一些基础常用类

/*** author silence* javase 的一些基础常用类*/ public class Silence1 {public static void main(String[] args) { // Obect equals hashcode // Arrays toString sort binarySearch 输出数组 排序 查找 // Objects nonNull isNull 对对象的…

UDP 通讯协议 局域网通信发送消息 简单实现

发送端 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/*** UDP 通讯协议 局域网通信发送消息 简单实现 发送端** author silence*/ public class SendDemo {public static void main(String[] arg…

TCP局域网 通讯 的消息发送

import java.io.*; import java.net.ServerSocket; import java.net.Socket;/*** 初学者TCP局域网 通讯 的消息发送* TCP 服务器* 必须先 打开服务器才能 打开客户端建立连接** author silence*/ public class TcpInput {public static void main(String[] args) throws IOE…

基于多线程的TCP局域网通信,客户端向服务端上传 文件简单实现源码

客户端 import java.io.*; import java.net.Socket;/*** ### 作业3&#xff1a;* 完成文件上传案例学习* - 案例需求* 客户端&#xff1a;数据来自于本地文件&#xff0c;接收服务器反馈* 服务器&#xff1a;接收到的数据写入本地文件&#xff0c;给出反馈* - 案例分析* - 创建…

多线程完成连续打印1-100的数字, 要求一条线程专门打印奇数,另外一条专门用来打印偶数

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** ### 作业5&#xff1a;* 请利用线程间通信, 完成连续打印1-100的数字, 要求一条线程专…

通过反射获得类的构造引用无视private修饰符

import operate327.Demo; import operate425.demo.demo1.Student;import java.lang.reflect.Constructor;/*** 通过反射获得类的构造引用无视private修饰符** author silence*/ public class ClassConstructor {public static void main(String[] args) throws Exception {//获…

通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值

import operate425.demo.demo1.Student;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException;/*** 通过反射突破private访问修饰符获取私有和公共的属性&#xff0c;设置和获取值** author silence*/ …

通过反射突破访问修饰符,调用private私有的方法

import operate425.demo.demo1.Student;import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;/*** 通过反射突破访问修饰符&#xff0c;调用private私有的方法** author silence*/ public class Clas…

ArrayList单列集合的简单使用常见方法

import java.util.ArrayList; import java.util.Iterator;/*** ArrayList单列集合的简单使用常见方法** author silence* 单列 &#xff1a;一次只能存储一个数据元素 list.add("张三"); 不像map集合可以存储一个键值对&#xff0c;两个元素 map.put("张三&quo…

使用三种方式创建Class字节码类文件对象

/*** 使用三种方式创建Class字节码类文件对象** author silence*/ public class Demo1 {public static void main(String[] args) throws Exception {Class<?> clazz1 Class.forName("operate425.operate.operate1.Demo1");Class<?> clazz2 Demo1.cl…

通过反射获得私有构造器,创建对象

import java.lang.reflect.Constructor;/*** 通过反射获得私有构造器&#xff0c;创建对象** author silence*/ public class Demo1 {public static void main(String[] args) throws Exception {//获得字节码文件Class<User> userClass User.class;//获得私有化构造方法…