- 浏览: 138814 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
DRUNKonSTREET:
66666
Thinking in java 的课后习题答案以及源代码下载 -
疯青春you:
net.mindview.util.Print.*; 这个包在 ...
Thinking in java 的课后习题答案以及源代码下载 -
hpf_888:
想问一下,注解的方式下,如何能实现动态sql效果?
MyBatis动态SQL -
Spirit_eye:
楼主好人一生平安
Thinking in java 的课后习题答案以及源代码下载 -
lycrystal818:
最近发现基础知识不太扎实,买了本think in java 看 ...
Thinking in java 的课后习题答案以及源代码下载
第一题:现有的程序代码模拟产生了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(); } } }
答个
package thread; import java.util.ArrayList; import java.util.List; public class MainThread5 extends Thread { public static void main(String[] args) throws InterruptedException{ System.out.println("begin:"+(System.currentTimeMillis()/1000)); long a = System.currentTimeMillis()/1000; /*模拟处理16行日志,下面的代码产生了16个日志对象,当前代码需要运行16秒才能打印完这些日志。 修改程序代码,开四个线程让这16个对象在4秒钟打完。 */ List<String> list = new ArrayList<String>(); for(int i=0;i<16;i++){ //这行代码不能改动 final String log = ""+(i+1);//这行代码不能改动 { list.add(log); if((i+1)%4==0){ final Object[] objs = list.toArray(); new Thread(){ public void run(){ for(int j = 0; j < objs.length; j++) parseLog(objs[j].toString()); } }.start(); list.clear(); } } } } //parseLog方法内部的代码不能改动 public static void parseLog(String log){ System.out.println(log+":"+(System.currentTimeMillis()/1000)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
第二题:现成程序中的Test类中的代码在不断地产生数据,然后交给TestDo.doSome()方法去处理,就好像生产者在不断地产生数据,消费者在不断消费数据。请将程序改造成有10个线程来消费生成者产生的数据,这些消费者都调用TestDo.doSome()方法去进行处理,故每个消费者都需要一秒才能处理完,程序应保证这些消费者线程依次有序地消费数据,只有上一个消费者消费完后,下一个消费者才能消费数据,下一个消费者是谁都可以,但要保证这些消费者线程拿到的数据是有顺序的。原始代码如下:
package queue; public class Test { public static void main(String[] args) { System.out.println("begin:"+(System.currentTimeMillis()/1000)); for(int i=0;i<10;i++){ //这行不能改动 String input = i+""; //这行不能改动 String output = TestDo.doSome(input); System.out.println(Thread.currentThread().getName()+ ":" + output); } } } //不能改动此TestDo类 class TestDo { public static String doSome(String input){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } String output = input + ":"+ (System.currentTimeMillis() / 1000); return output; } }
答个
package thread; import java.util.LinkedList; import java.util.List; public class MainThread7 { public static LinkedList<String> lista = new LinkedList<String>(); public static void main(String[] args) { System.out.println("begin:"+(System.currentTimeMillis()/1000)); for(int i=0;i<10;i++){ //这行不能改动 String input = i+""; //这行不能改动 lista.add(input); } for(int i=0; i<10; i++){ new Thread(){ public void run(){ synchronized (lista) { String a = lista.poll(); String output = TestDo2.doSome(a); System.out.println(Thread.currentThread().getName()+ ":" + output); } } }.start(); } } } //不能改动此TestDo类 class TestDo2 { public static String doSome(String input){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } String output = input + ":"+ (System.currentTimeMillis() / 1000); return output; } }
第三题:现有程序同时启动了4个线程去调用TestDo.doSome(key, value)方法,由于TestDo.doSome(key, value)方法内的代码是先暂停1秒,然后再输出以秒为单位的当前时间值,所以,会打印出4个相同的时间值,如下所示:
4:4:1258199615
1:1:1258199615
3:3:1258199615
1:2:1258199615
请修改代码,如果有几个线程调用TestDo.doSome(key, value)方法时,传递进去的key相等(equals比较为true),则这几个线程应互斥排队输出结果,即当有两个线程的key都是"1"时,它们中的一个要比另外其他线程晚1秒输出结果,如下所示:
4:4:1258199615
1:1:1258199615
3:3:1258199615
1:2:1258199616
总之,当每个线程中指定的key相等时,这些相等key的线程应每隔一秒依次输出时间值(要用互斥),如果key不同,则并行执行(相互之间不互斥)。原始代码如下:
package syn; //不能改动此Test类 public class Test extends Thread{ private TestDo testDo; private String key; private String value; public Test(String key,String key2,String value){ this.testDo = TestDo.getInstance(); /*常量"1"和"1"是同一个对象,下面这行代码就是要用"1"+""的方式产生新的对象, 以实现内容没有改变,仍然相等(都还为"1"),但对象却不再是同一个的效果*/ this.key = key+key2; this.value = value; } public static void main(String[] args) throws InterruptedException{ Test a = new Test("1","","1"); Test b = new Test("1","","2"); Test c = new Test("3","","3"); Test d = new Test("4","","4"); System.out.println("begin:"+(System.currentTimeMillis()/1000)); a.start(); b.start(); c.start(); d.start(); } public void run(){ testDo.doSome(key, value); } } class TestDo { private TestDo() {} private static TestDo _instance = new TestDo(); public static TestDo getInstance() { return _instance; } public void doSome(Object key, String value) { // 以大括号内的是需要局部同步的代码,不能改动! { try { Thread.sleep(1000); System.out.println(key+":"+value + ":" + (System.currentTimeMillis() / 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } }
答个
发表评论
-
转 多字段排序
2013-02-01 15:04 1007多字段排序的问题其实很简单,只要实现一个自己的Comparat ... -
IO题目
2012-03-09 14:48 1075题目:文件intel.txt,内容如下: 小王【空格】1 ... -
浅复制与深复制概念
2012-02-22 23:42 943转自http://blog.csdn.net/accp ... -
java守护线程(daemon)(转)
2011-08-29 10:33 1923package chenwenbiao.test; impo ... -
比较JDK版本,JDK 1.5中新增的语言特性
2011-08-08 22:03 1122JDK1.5(JDK5.0) Java2标准 ... -
消费者与生产者
2011-08-08 17:01 957多线程同步之生产者---消费者模型 线程同步是个老生常谈的问 ... -
排序算法
2011-07-24 17:36 710public class Sort { public ... -
一个不错的文本比较工具
2011-06-19 21:20 1150一个不错的文本比较工具 UltraCompare -
CSS 禅意花园
2011-06-09 18:34 927CSS 禅意花园 -
锋利的JQuery
2011-06-08 08:07 725锋利的JQuery -
JQuery基础教程
2011-06-08 07:46 748JQuery基础教程 -
配个电脑
2011-05-19 14:15 954微星(MSI) 880GM-E35 主板 (AMD 880G/ ... -
Java I/O 2nd Edition 翻译
2011-05-04 10:27 17092.3关闭输出流 当你完成了一个流,你应当关闭它。这 ... -
关于 JAVA I/O 二
2011-04-28 17:12 559大多初学者对java I/O系 ... -
关于JAVA I/O 一
2011-04-28 17:07 792发信人: hzxdark (漆黑之翼), 信区: Java ... -
题目收集
2011-04-25 13:18 6722007.12月份,爱帮面试 有3面,每次面试都是一个技术面 ... -
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()解决办法
2011-04-17 13:13 788是jar包冲突,因为Struts2.1.8.1自带的antlr ... -
String 类的使用
2011-04-02 19:12 964public class StringTest { publ ... -
JAVA 关于String的CompareTo方法即字典序比较
2011-03-31 15:22 11797按字典顺序比较两个字符串。该比较基于字符串中各个字符的 U ... -
Java toString()
2011-03-30 17:07 931toString()方法就是把对象转换成String类型,转换 ...
相关推荐
在该题中,要求实现一个程序,能够利用多个线程打印出16个数字。具体要求为:创建16个线程,每个线程调用`parseLog()`方法打印一个数字。最终的效果是这16个数字按照顺序被打印出来,并且每个数字后面跟随着当前的...
本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式...
**CC++多线程编程**是现代软件开发中的重要组成部分,尤其在高性能计算、服务器端应用和实时系统中,多线程技术能充分利用多核处理器的资源,提高程序的执行效率。以下是一些关于CC++多线程编程的核心知识点: 1. *...
总结来说,Java基础多线程练习题主要涵盖了线程的创建、同步与通信、线程安全以及并发工具的使用。通过这些题目,你可以更好地理解线程的工作原理,学会在实际项目中有效利用多线程提高程序性能,避免潜在的问题。在...
C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等
### 线程编程面试题详解 #### 60、Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? - **实现线程的方法**:Java中实现线程有两种基本方式: - 继承`Thread`...
以下是一些经典的多线程面试题知识点: 1. Java中的线程状态有哪些? - 新建状态(New):线程对象创建后,但尚未启动。 - 就绪状态(Runnable):处于就绪状态的线程随时可能被CPU调度执行。 - 运行状态...
在探讨iOS多线程的面试题目时,我们首先要明确进程和线程的定义及其关系。进程可以被理解为计算机上一次执行活动的程序,它是操作系统分配资源的基本单元,拥有独立的内存空间和运行所需的全部资源。当我们提到一个...
多线程面试59题(含答案)是关于多线程编程的知识点总结,涵盖了多线程的基本概念、优点、线程和进程的区别、Java 实现多线程的方式、启动线程方法的区别、终止线程的方式、线程的生命周期、wait()和 sleep()方法的...
### 多线程经典面试题解析 #### Java 实现线程的方式 1. **继承 `Thread` 类**:这是最直接的方式,通过继承 `Thread` 类,并重写 `run()` 方法来实现线程的逻辑。这种方式简单直接,但是因为 Java 不支持多重继承...
在Java编程领域,多线程是一项至关重要的技术,特别是在开发高效、响应迅速的应用程序时。以下是一些关于Java多线程的面试题...在实际项目中,理解并熟练运用这些概念能够帮助开发者构建出更加高效、健壮的多线程应用。
- interrupt():设置线程的中断标志,不立即停止线程,而是在线程检查中断状态时抛出InterruptedException。 - isInterrupted():检查线程是否被中断。 - interrupted():检查并清除中断标志,返回当前中断状态。...
使用`try-catch-finally`结构可以捕获和处理异常,而`ThreadAbortException`是线程被强制终止时抛出的特殊异常。 线程池是一种优化线程创建和销毁的机制,它管理一组可重用线程,减少系统开销。C#中的`ThreadPool`...
### Java线程面试题知识点详解 #### 一、线程基本概念 1. **什么是线程?** - 线程是操作系统中能够独立运行的最小单位,它被包含在一个进程中,是进程中的实际执行单元。通过多线程编程可以有效利用多核处理器...
Java多线程是Java编程中的核心概念,尤其在面试中,它是考察开发者高级技能和并发理解的关键领域。这里,我们将深入探讨与Java多线程相关的68个面试问题,涵盖基础知识、线程安全、同步机制、线程池、死锁等关键知识...
Java中的多线程是面试中常见的话题,涵盖了操作系统的基础概念以及Java并发库的高级特性。以下是对这些知识点的详细解释: 1. **线程**:线程是操作系统调度的基本单元,一个进程中可以有多个线程并发执行。在多...
Java 线程面试题 Top 50 Java 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。 一、什么是...
Java 多线程知识讲解及练习题 Java 多线程基础知识的了解是 Java 程序设计的重要组成部分,本资源摘要信息对 Java 多线程基础知识进行了详细的讲解和练习题。 1. sleep() 和 wait() 的区别 sleep() 是 Thread 类...