需求:
用多线程去获得一个网站取得的数据,网站数据分页显示,一个线程读取几页。通过构造函数把读取的开始页数赋值。
public class SelectPhone extends Thread{
int a = 0; //这里无需担心多线程安全的问题,因为这里是多实例的,在main函数
//中生成的是5个对象,而不是想Spring注入那样共用一个实例。所以每个实例的a都不同
public SelectPhone(int flag){
a = flag;
};
public static void main(String[] args){
SelectPhone s = new SelectPhone(0);
SelectPhone s1 = new SelectPhone(2);
SelectPhone s2 = new SelectPhone(5);
SelectPhone s3 = new SelectPhone(8);
SelectPhone s4 = new SelectPhone(11);
System.out.println("a="+s.a);
System.out.println("a="+s1.a);
System.out.println("a="+s2.a);
System.out.println("a="+s3.a);
System.out.println("a="+s4.a); //这里相继输出0,2,5,8,11,
s.start();
s1.start();
s2.start();
s3.start();
s4.start();
}
public void run(){
System.out.println("begin"+System.currentTimeMillis()+"~~~~"+a);
String returnStr = null;
String searchStr[] = new String[750];
System.out.println("a="+a); //最后输出的结果可能为a=2,a=0,a=8,a=11,a=5这种不按顺序的,
for(int page=a;page<a+3;page++) 因为不一定哪个线程会先执行到这里
{
................
}
}
}
另附一遍详解java多线程性能的文章
java多线程性能浅析 - 一篇把线程描述得很形象的文章
今天看见je上一帖,对于上亿数据求和的算法,采用多线程到底快还是慢,我认为需要按情况而定。 1.单核,无IO,网络等资源操作情况下 结果:多线程比单线程理论上要慢 原因:多线程启动线程需要消耗cpu资源,多线程只是把这一计算过程分片,在同一时刻只会有一个线程占有cpu,所以采用多线程不但在启动时耗费资源,在线程调度上同样也耗费时间。所以单线程比多线程理论上要快。 2.单核,有IO,网络等资源操作情况下 结果:多线程比单线程理论上要快 原因:如果这上亿数据需要从文件中或者网络的其它地方(数据库)获取,在IO和网络操作的时候,由于IO和网络操作比cpu慢的多,所以cpu等待io操作;多线程的时候,当一个线程io读取部分数据的时候,其它线程可以进行计算。而单线程需要等待文件读取完成后进行计算。所以理论上多线程要快。 3.多核,无IO,网络等资源操作情况下 结果:不确定 原因:在大部分操作系统上,一个进程的多个线程可以分配到多个cpu上并行处理所以多线程理论上比单线程快;在部分的操作系统上不支持一个进程的多个线程分配到多个cpu上并行处理,根据1的结果可以看出多线程理论上比单线程慢。 4.多核,有IO,网络等资源操作情况下 结果:多线程比单线程理论上要快 原因:如果操作系统支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快。 如果操作系统不支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快,根据2的结果得出。 拿je上高手们的一个例子:挖山洞,我扩展下。 单核,单线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出。 单核,多线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出,运土的时候,另一个工作者开始挖掘; 双核,单线程,有IO:相当于从山的两侧一个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出; 双核,多线程,有IO:相当于从山的两侧两个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出; 单核,单线程,无IO:相当于一个工作者从山的一侧进行挖掘工作。 单核,多线程,无IO:相当于两个工作者从山的一侧进行挖掘工作,一个挖会休息,另一个歇息。 双核,单线程,无IO:相当于从山的两侧一个工作者进行挖掘工作。 双核,多线程,无IO:相当于从山的两侧两个工作者进行挖掘工作。 当然有些工地只允许一个工作者工作。 例子虽然比较牵强,但也大致可以说出个理来。一年后在来分析下,看看能不能从更深的角度进行分析! 转自: http://www.iteye.com/topic/848486
|
分享到:
相关推荐
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
java多线程实例
java 多线程例子
6个非常经典的java多线程实例!欢迎下载!!!
java多线程实例,本实例中通过线程A和线程B说明的了程序在运行中是如何在线程A和线程B间转换的
详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。
java多线程小程序实例 java多线程小程序实例
描述java多线程的例子,可供进一步学习多线程的人参考
java一个多线程的经典例子java一个多线程的经典例子
学习java多线程的经典例子,让你深刻了解java多线程编程。
java多线程例子(1).pdf java多线程例子(1).pdf java多线程例子(1).pdf
java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可
很简单的一个java多线程例子,希望多大家有帮助
很好的JAVA多线程实例,方便初学都学习。
java 多线程例子.doc java 多线程例子.doc
哲学家就餐:Java多线程实例图形版 哲学家就餐是一个经典的Java多线程编程的实例,这是图形版。涉及到线程同步与互斥,临界区访问问题以及避免死锁的方法。 哲学家就餐:有五个哲学家绕着圆桌坐,每个哲学家...