---------------------- android培训、java培训、期待与您交流! ----------------------
学完jdk1.5线程新特性后
有3道空中网的面试题
感觉学完上面的java5的线程并发库
做这个题还是蛮简单的
线程并发库很多工具类
感觉有各种不同的方式去实现
还是要多练习
第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。原始代码如下:
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();
}
}
}
刚学完线程并发库
感觉就是小case了
张老师的视频中是用的阻塞队列
感觉差不多
import java.util.concurrent.*;
public class LogTest{
public static void main(String[] args){
ExecutorService es=new ScheduledThreadPoolExecutor(4); //新建一个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);// 这行代码不能改动
{
// LogTest.parseLog(log);
es.execute(new Task(log)); //直接把16个任务丢给线程池去做
}
}
}
static class Task implements Runnable{
String log;
public Task(String log){
this.log=log;
}
public void run(){ //任务就是调用LogTest.parseLog
LogTest.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();
}
}
}
---------------------- android培训、 java培训、期待与您交流! ----------------------
详细请查看: http://edu.csdn.net/heima