java多线程——比较单线程和多线程的处理时间

通过实验对比,展示了在复制图片任务中,单线程、十个线程和多线程的处理时间。结果显示,尽管多线程效率更高,但其性能受CPU、内存等硬件限制,单CPU系统中线程由进程分配资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分别使用单线程、十个线程和多线程把一个文件夹下的一百张图片复制到另一个文件夹下,比较它们的处理时间
使用单线程:

package lesson19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

public class MovieStone
{

	public static void main(String[] args)
	{
		long begin=new Date().getTime();
		InputStream in=null;
		OutputStream out=null;
		File dir=new File("D:\\export");
		File[] listFiles = dir.listFiles();
		for(int i=0;i<listFiles.length;i++)
		{
			try
			{
				in=new FileInputStream(listFiles[i]);
				out=new FileOutputStream("D:\\新地方\\"+listFiles[i].getName());
				byte[] b=new byte[1024];
				int len=0;
				while((len=in.read(b))!=-1)
				{
				
				out.write(b,0,len);
				}
			}
			catch (FileNotFoundException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			catch (IOException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			finally
			{
				try
				{
					in.close();
					out.close();
				}
				catch (IOException e)
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			
			
			
		}
		long end=new Date().getTime();
		System.out.println(end-begin);
	}
}

所用的时间:
在这里插入图片描述
十个线程:

package lesson20190519;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

public class Move10Thread
{

	public static void main(String[] args)
	{
		long begin=new Date().getTime();
		File dir=new File("D:\\export");
		File[] listFiles = dir.listFiles();
		for(int j=1;j<=10;j++)
		{
			final int s=j;
        new Thread()
        {
			public void run()
			{
				for(int i=(s-1)*10;i<s*10;i++)
				{
					InputStream in=null;
					OutputStream out=null;
					try
					{
						in=new FileInputStream(listFiles[i]);
						out=new FileOutputStream("D:\\还是那个地方\\"+listFiles[i].getName());
						byte[] b=new byte[1024];
						int len=0;
						while((len=in.read(b))!=-1)
						{
							out.write(b,0,len);
						}
					}
					catch (FileNotFoundException e)
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					catch (IOException e)
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					finally
					{
						try
						{
							in.close();
							out.close();
						}
						catch (IOException e)
						{
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					
				}
				
			}
        	
        }.start();
        
		}
		long end=new Date().getTime();
		System.out.println(end-begin);
	}
}

使用时间:
在这里插入图片描述

一百个线程:

package lesson19;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

public class TheadMoveStone
{
    
	public static void main(String[] args)
	{
		long begin=new Date().getTime();
		File dir=new File("D:\\export");
		File[] listFiles = dir.listFiles();
		for(int i=0;i<listFiles.length;i++)
		{
			final File file=listFiles[i];
			new Thread()
			{
				public void run()
				{
					InputStream in=null;
					OutputStream out=null;
					try
					{
						in=new FileInputStream(file);
						out=new FileOutputStream("D:\\老地方\\"+file.getName());
						byte[] b=new byte[1024];
						int len=0;
						while((len=in.read(b))!=-1)
						{
							out.write(b);
						}
						
					}
					catch (FileNotFoundException e)
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					catch (IOException e)
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					finally
					{
						try
						{
							in.close();
							out.close();
						}
						catch (IOException e)
						{
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					
				}
				
			}.start();
		}
		long end=new Date().getTime();
		System.out.println(end-begin);
	}
}

多线程用时:
在这里插入图片描述
可见使用多线程效率要比单线程高出很多,多线程不稳定,处理速度的最终决定因素是CPU、内存等,在单CPU(无论多少核)上,分配CPU资源的单位是“进程”而不是“线程”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值