//第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。原始代码如下: package read; public class Test { public static void main(String[] args){ System.out.println("begin:"+(System.currentTimeMillis()/1000)); /*模拟处理16行日志,下面的代码产生了16个日志对象,当前代码需要运行16秒才能打印完这些日志。 修改程序代码,开四个线程让这16个对象在4秒钟打完。 */ for(int i=0;i<16;i++){ //这行代码不能改动 final String log = ""+(i+1);//这行代码不能改动 { Test.parseLog(log); } } } //parseLog方法内部的代码不能改动 public static void parseLog(String log){ System.out.println(log+":"+(System.currentTimeMillis()/1000)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
使用Executors创建有是个线程的线程池实现功能
package cn.zto.skyone; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /* * */ public class Test { public static void main(String[] args){ ExecutorService service = Executors.newFixedThreadPool(4); System.out.println("begin:"+(System.currentTimeMillis()/1000)); /*模拟处理16行日志,下面的代码产生了16个日志对象,当前代码需要运行16秒才能打印完这些日志。 修改程序代码,开四个线程让这16个对象在4秒钟打完。 */ for(int i=0;i<16;i++){ //这行代码不能改动 final String log = ""+(i+1);//这行代码不能改动 { service.execute(new Runnable() { @Override public void run() { Test.parseLog(log); } }); } } service.shutdown(); } //parseLog方法内部的代码不能改动 public static void parseLog(String log){ System.out.println(log+":"+(System.currentTimeMillis()/1000)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行效果如下:
begin:1404732090
1:1404732090
2:1404732090
3:1404732090
4:1404732090
5:1404732091
7:1404732091
6:1404732091
8:1404732091
9:1404732092
10:1404732092
11:1404732092
12:1404732092
13:1404732093
14:1404732093
15:1404732093
16:1404732093
相关推荐
本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式...
C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等
在探讨iOS多线程的面试题目时,我们首先要明确进程和线程的定义及其关系。进程可以被理解为计算机上一次执行活动的程序,它是操作系统分配资源的基本单元,拥有独立的内存空间和运行所需的全部资源。当我们提到一个...
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...
以下是一些关于Java多线程的面试题及其答案,涵盖了基础概念、并发控制、线程安全以及性能优化等方面。 1. **什么是Java多线程?** 多线程是指在单个程序中同时执行多个线程,这样可以提高应用程序的效率和响应...
Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题、Mysql面试题、VUE面试题、算法面试题、运维面试题。 收集汇总各行业笔试or编程题解题思路 ...
了解这些核心概念后,开发者可以更好地应对Java多线程面试中可能出现的问题,同时也能在实际项目中灵活运用多线程技术,提升程序性能。多线程编程虽然复杂,但掌握好相关的工具和原理,就能有效地解决并发问题,编写...
对于C#开发者来说,理解和掌握多线程技术不仅能够优化代码性能,也是面试中常被问到的知识点。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。主线程通常...
根据给定文件中的标题、描述、标签以及部分内容,可以总结并深入分析三个关于Java线程相关的面试题目。这些题目不仅考验应聘者对于Java线程的理解,还涉及到了并发编程的实际应用能力。 ### 第一题:多线程打印16个...
以下是一些经典的多线程面试题知识点: 1. Java中的线程状态有哪些? - 新建状态(New):线程对象创建后,但尚未启动。 - 就绪状态(Runnable):处于就绪状态的线程随时可能被CPU调度执行。 - 运行状态...
多线程面试59题(含答案)是关于多线程编程的知识点总结,涵盖了多线程的基本概念、优点、线程和进程的区别、Java 实现多线程的方式、启动线程方法的区别、终止线程的方式、线程的生命周期、wait()和 sleep()方法的...
在C++笔试面试中,网络和多线程是两个经常被提及的重要知识点。本篇文档详细列举了关于网络部分的面试题目,同时也涉及了与多线程相关的TCP/IP协议栈的建立和断开过程。以下为详细的知识点总结: 1. TCP服务创建...
标题提到的是"Java面试题、JVM面试题、多线程面试题",而描述和标签却提及"python编程"。不过,既然您希望聚焦于"Java面试题、JVM面试题、多线程面试题",我将为您详细介绍这些主题。 **Java面试题** 1. **Java是...
Java中的多线程是面试中常见的话题,涵盖了操作系统的基础概念以及Java并发库的高级特性。以下是对这些知识点的详细解释: 1. **线程**:线程是操作系统调度的基本单元,一个进程中可以有多个线程并发执行。在多...
### 多线程经典面试题解析 #### Java 实现线程的方式 1. **继承 `Thread` 类**:这是最直接的方式,通过继承 `Thread` 类,并重写 `run()` 方法来实现线程的逻辑。这种方式简单直接,但是因为 Java 不支持多重继承...
以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。