精华内容
下载资源
问答
  • 多线程优势在哪
    千次阅读
    2019-01-22 13:02:44

    一般情况下你的程序是单线程的,结果就是由第一行执行到最后一行,或者中间有跳转,但是你执行一行代码的时候,其他行的程序代码都是等待的状态,不会去运行;而线程开了之后(采用了多线程技术),意味着默认的线程执行自己的代码,而new的新线程也会执行自己的代码,两者是可以平行工作的。

    采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。

    更多相关内容
  • 当然是多线程优势已经掩盖了它本身不足之处,所以我们来加强一下学习python多线程的信心吧~ 总结起来,使用多线程编程具有如下几个优点: 进程之间不能共享内存,但线程之间共享内存非常容易。 操作系统创建进程...
  • 具有多线程能力的计算机因有硬件支持而能够同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即一个程序中可以同时运行多个不同制的线程来执行不同的任务,允许...

    多线程有什么好处?提高CPU的利用率,更好地利用系统资源,使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段,使用不同的同步类创建自己的同步机制。

    多线程指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同制的线程来执行不同的任务,允许单个程序创建多个并行执行的线程来完成各自的任务。
    在这里插入图片描述
    多线程的好处提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,大大提高程序的效率。下面,详细来说说多线程的一些优势!

    一、多线程优势

    采用多线程技术的应用程序可以更好地利用系统资源。主要优势在于充分利用了CPU的空闲时间片,用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。

    线程同步,在多线程应用中,考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的死锁。为了防止死锁的发生,需要通过同步来实现线程安全。在Visual Basic中提供了三种方法来完成线程的同步。在Java中可用synchronized关键字。

    二、代码域同步

    使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段。

    三、手工同步

    可以使用不同的同步类创建自己的同步机制。这种同步方式要求你自己手动的为不同的域和方法同步,这种同步方式也可以用于进程间的同步和解除由于对共享资源的等待而造成的死锁。

    四、上下文同步

    使用SynchronizationAttribute为ContextBoundObject对象创建简单的,自动同步。这种同步方式仅用于实例化的方法和域的同步。所有在同一个上下文域的对象共享同一个锁。

    总结多线程的好处,使用线程可以把占据时间长的程序中的任务放到后台去处理;用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度;程序的运行效率可能会提高;在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了。

    以上就是分享的关于多线程的一些知识,想了解更多高级Java技术知识,你可以关注我,定期发布技术热点和行业趋势分析,助力你快速入职。

    展开全文
  • 具有多线程能力的计算机因有硬件支持而能够同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即一个程序中可以同时运行多个不同制的线程来执行不同的任务,允许单...

    线程多有什么好处?提高CPU的利用率,更好地利用系统资源,使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段,使用不同的同步类创建自己的同步机制。

    14b27ec96385a12fad106fb791198172.png

    多线程指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同制的线程来执行不同的任务,允许单个程序创建多个并行执行的线程来完成各自的任务。

    多线程的好处提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,大大提高程序的效率。

    一、多线程优势

    采用多线程技术的应用程序可以更好地利用系统资源。主要优势在于充分利用了CPU的空闲时间片,用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。

    线程同步,在多线程应用中,考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的死锁。为了防止死锁的发生,需要通过同步来实现线程安全。在Visual Basic中提供了三种方法来完成线程的同步。在Java中可用synchronized关键字。

    二、代码域同步

    使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段。

    三、手工同步

    可以使用不同的同步类创建自己的同步机制。这种同步方式要求你自己手动的为不同的域和方法同步,这种同步方式也可以用于进程间的同步和解除由于对共享资源的等待而造成的死锁。

    四、上下文同步

    使用SynchronizationAttribute为ContextBoundObject对象创建简单的,自动同步。这种同步方式仅用于实例化的方法和域的同步。所有在同一个上下文域的对象共享同一个锁。

    总结多线程的好处,使用线程可以把占据时间长的程序中的任务放到后台去处理;用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度;程序的运行效率可能会提高;在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.

    展开全文
  • 问题的提出 增加线程数以增大速度 线条绘制时的问题 计数器的计算 问题的解释 问题的解决 介绍相关锁 举例说明

    多线程的优势

    多线程可以让一个进程有多个并发操作,及多个任务在同一个时间被执行,提高了系统的吞吐率,而且一个进程中的多个线程可以共享其所在进程所申请的资源,如内存空间,节约了对系统资源的利用率
    下面用一个彩色线条的例子来体现多线程:

    UI.java

    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    
    public class UI {
    
    	public static void main(String[] args) {
    		UI myui=new UI();
    		myui.Initl();
    	}
    	
    	void Initl() {
    		//初始化界面
    		JFrame myjf=new JFrame();
    		myjf.setTitle("多线程示例");
    		myjf.setSize(800,600);
    		myjf.setDefaultCloseOperation(3);
    		myjf.setLocationRelativeTo(null);
    		myjf.setVisible(true);
    		
    		Graphics g=myjf.getGraphics();
    		
    		//创建监听器对象,并给窗体加上鼠标监听器
    		Mouse_Lis listener=new Mouse_Lis();
    		myjf.addMouseListener(listener);
    		
    		//创建线程类对象,把鼠标点击后获取的矩形对象传给线程类
    		Thread_Rec rectangle=new Thread_Rec(g);
    		rectangle.reclist=listener.reclist;
    		
    		//创建线程并启动
    		Thread thr1=new Thread(rectangle);
    		thr1.start();
    	}
    }
    

    Rectangle.java

    import java.awt.Color;
    import java.awt.Graphics;
    
    public class Rectangle {
    
    	/*
    	 * x,y:矩形的坐标
    	 * speedx,speedy:移动的速度
    	 * size:大小
    	 * color:矩形的颜色
    	 */
    	int x,y,speedx,speedy,size;
    	Color color;
    	//构造方法
    	public Rectangle(int x,int y,int speedx,int speedy,int size,Color color) {
    		// TODO Auto-generated constructor stub
    		this.x=x;
    		this.y=y;
    		this.speedx=speedx;
    		this.speedy=speedy;
    		this.size=size;
    		this.color=color;
    	}
    	
    	//小矩形绘制
    	void Draw(Graphics g) {
    		g.setColor(color);
    		g.fillRect(x, y, size, size);
    	}
    	
    	//小矩形移动
    	void Move() {
    		if(x<0||x>1000) {
    			speedx=-speedx;
    		}else if(y<0||y>800) {
    			speedy=-speedy;
    		}
    		x+=speedx;
    		y+=speedy;
    	}
    }
    

    Mouse_Lis.java

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.Random;
    
    public class Mouse_Lis extends MouseAdapter{
    
    	/*
    	 * rec:用来存储矩形的队列
    	 * x,y:鼠标获取的矩形的坐标
    	 * color:小球的颜色
    	 */
    	ArrayList<Rectangle> reclist=new ArrayList();
    	
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		// TODO Auto-generated method stub
    		int x=e.getX();
    		int y=e.getY();
    		Random ran=new Random();
    		Color color=new Color(ran.nextInt(Integer.MAX_VALUE));
    		
    		Rectangle rectan=new Rectangle(x,y,1,1,30,color);
    		reclist.add(rectan);//入队列
    	}	
    
    }
    

    Thread_Rec.java

    import java.awt.Graphics;
    import java.util.ArrayList;
    
    public class Thread_Rec implements Runnable{
    
    	ArrayList<Rectangle> reclist;
    	Graphics g;
    	public Thread_Rec(Graphics g) {
    		this.g=g;
    	}
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true) {
    			for(int i=0;i<reclist.size();i++) {
    				Rectangle rect=reclist.get(i);
    				//调用矩形类的方法画图
    				rect.Draw(g);
    				rect.Move();
    				
    			}
    			try {
    				Thread.sleep (15); 
    				} catch (InterruptedException e) {
    					e.printStackTrace (); 
    					}
    		}
    		
    	}
    
    }
    

    这是一个线程,可如果我们,在界面类做如下改进,启动多个线程的话:

    		Thread thr2=new Thread(rectangle);
    		thr2.start();
    		Thread thr3=new Thread(rectangle);
    		thr3.start();
    

    绘制速度会明显加快。
    单线程就好比你踢了一次球,而多线程相当于你多次踢了同一个球,很明显该球会变得更快。当然这并不是线性的叠加,讲线程问题时会提到。

    线程问题的发现

    运行单线程时效果如下:
    在这里插入图片描述

    运行多线程时效果如下:
    在这里插入图片描述
    仔细观察就会发现单线程虽然速度慢,但它的线条笔直,而且颜色非常纯正,而多线程虽然速度快,但是会有颜色突变,为什么呢?

    线程问题的解释

    多个线程在共享数据时,很可能产生数据一致性的问题,如读取过期的数据,某些线程所做的更新被其他线程所做的更新更改等。例如上述例子:因为多个线程共有一个画笔g,在一个线程还未绘制完矩形时画笔的颜色已被另一个线程所更改。

    线程问题的解决

    这种情况在真正的大型系统中是十分危险的。在介绍解决办法之前先了解几个名词:
    原子操作
    原子操作是指单一不可分割的操作。例如:int x=2;虽然是一条语句,但是实际操作时却分为两步:(1)声明变量x;(2)给变量赋值为2。第一步和第二步之间是可以被其他线程打断的,故不是原子操作。
    :如果不想某段代码在运行时被打断,可以通过对该段代码上锁来把它变成 “原子操作” 。
    解决:使用关键字synchronized给代码上锁来实现操作的原子性,其本质是通过该关键字所包含的临界区(Critical Section)的排他性保证在任何一个时刻只有一个线程能执行临界区的代码。

    举例说明 代码改进

    在线程类的run方法中给代码加锁:

    public void run() {
    		// TODO Auto-generated method stub
    		while(true) {
    			for(int i=0;i<reclist.size();i++) {
    				Rectangle rect=reclist.get(i);
    				//加锁
    				synchronized (g) {
    				rect.Draw(g);
    				rect.Move();
    				}
    			}
    			try {
    				Thread.sleep (15); 
    				} catch (InterruptedException e) {
    					e.printStackTrace (); 
    					}
    		}
    	}
    

    程序运行效果如下:
    在这里插入图片描述
    速度依旧很快,也没有颜色突变的情况了。

    再举例 (计数器)

    E.java

    public class E implements Runnable{
    	int count=0;
    	public static void main(String[] agrs) {
    		E e=new E();
    		Thread th=new Thread(e);
    		th.start();
    		Thread th2=new Thread(e);
    		th2.start();
    		Thread th3=new Thread(e);
    		th3.start();
    	}
    
    	@Override
    	public void run() {
    		while(true) {
    			for(int i=0;i<100;i++) {
    				count++;
    				try {
    					Thread.sleep (15); 
    					} catch (InterruptedException e) {
    						e.printStackTrace (); 
    						}
    			}
    			System.out.println("count="+count);
    		}
    			
    	}
    }
    

    程序运行时按理来说count应该是成百成百地增加,但实际情况却是:
    在这里插入图片描述
    给循环加锁之后:
    在这里插入图片描述

    总结

    多线程虽好,可要注意安全问题噢~

    展开全文
  • 多线程的好处是什么?

    千次阅读 2021-08-02 00:28:34
    从程序运行效率的角度来看,单核CPU 不但不会发挥出多线程优势,反而会因为单核CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU 我们还是要应用多线程,就是为了防止阻塞。试想,如果...
  • 多线程优势

    千次阅读 2015-05-18 17:55:01
    尽管多线程编程很有挑战,但它也有自己的优势,所以仍然使用多线程技术。下面是多线程的一些优势: 更好的资源利用率 某些情况下能简化程序设计 高响应程序 更好的资源利用率假设一个应用程序本地文件系统中读取...
  • 多线程的优点/作用

    千次阅读 2020-04-13 20:47:13
    多核CPU上的多线程它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 2、防止阻塞 单核CPU不但不会发挥多线程优势,反而再单核CPU上运行多线程会导致线程上下切换,而...
  • 多线程的优点

    2020-11-23 23:54:25
    像双核,四核,八核之类的,多核CPU上运行单线程会极大的造成资源的浪费,就拿双核上来讲会造成50%的资源浪费,四核则是75%等,而所谓的单核CPU上运行多线程是假的多线程,单核CPU同一段时间只会处理一段逻辑...
  • 项目中Java的多线程一般用哪些场景?多线程使用的主要目的在于举个简单的例子伪代码多线程的常见应用场景 多线程使用的主要目的在于 1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单...
  • Redis 6.0多线程模型总结

    千次阅读 多人点赞 2022-01-24 00:06:10
    这个版本提供了诸多令人心动的新特性及功能改进,比如新网络协议RESP3,新的集群代理,ACL等,其中关注度比较高的应该是多线程模型了。 1、Redis6.0之前的版本真的是单线程吗? Redis处理客户端的请求时,包括...
  • 来源:cnblogs.com/kenshinobiy/p/4671314.html多线程使用的主要目的在于:1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说...
  • 【Python 爬虫】多线程爬取

    千次阅读 2022-03-20 10:44:40
    文章目录前言一、多进程库(multiprocessing)二、多线程爬虫三、案例实操四、案例解析1、获取网页内容2、获取每一章链接3、获取每一章的正文并返回章节名和正文4、将每一章保存到本地5、多线程爬取文章 前言 简单...
  • 操作系统 --- 多线程(初阶)

    千次阅读 多人点赞 2022-03-16 14:03:45
    多线程(初阶) 1. 线程 1.1 为什么会有线程 上一节进程的课程我们学习了,引入进程就是为了"并发编程",虽然进程能解决并发的问题,但是我们认为还不是不够理想. 因为创建进程/销毁进程/调度进程,开销有点大, 创建进程...
  • 理解多线程的实际意义和优势

    千次阅读 2018-07-03 21:40:16
    首先理解并行和并发的区别:并行:指同一时刻,有条指令在多个处理器上同时执行;并发:指同一时刻,只能有一条指令执行,但个进程指令被快速轮换执行,使得宏观上具有个进程同时执行的效果。大部分操作...
  • 多线程在web中的使用

    千次阅读 2018-09-28 15:01:05
    整理网络上的 最典型的如: ... 且这类任务即使失败也不是特别重要的。 2、后台线程:比如定期...最典型的应用比如tomcat,tomcat内部采用的就是多线程。 上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理...
  • 多线程 什么是线程和进程?他们是什么关系? 进程:操作系统中能够独立运行,并且作为资源分配的基本单位。它表示运行中的程序。系统运行一个程序就是一个进程从创建、运行到消亡的过程。 线程:是一个比进程更小的...
  • 多进程和多线程的差别(优缺点)

    千次阅读 2021-04-14 16:09:34
    多进程/多线程目录:一.多线程的优点二.多进程的优点 目录: 对于问多进程和多线程之间的差别的问题,其实我们只要表明我们所知道的多进程和多线程各自的优点就可以了. 一.多线程的优点 1. 线程间通信会更加灵活 (包括...
  • C#高级--多线程详解

    千次阅读 多人点赞 2021-10-03 16:05:41
    C#高级–多线程详解 零、文章目录 一、什么是多线程 1、进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 2、线程 线程是...
  • 多线程面试题(值得收藏)

    万次阅读 多人点赞 2019-08-16 09:41:18
    史上最强多线程面试47题(含答案),建议收藏 金九银十快到了,即将进入找工作的高峰期,最新整理的最全多线程并发面试47题和答案总结,希望对想进BAT的同学有帮助,由于篇幅较长,建议收藏后细看~ 1、并发编程三要素?...
  • Java多线程学习(吐血超详细总结)

    万次阅读 多人点赞 2015-03-14 13:13:17
    本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。
  • java多线程优势

    千次阅读 2018-07-11 15:00:24
    多线程优势1,线程程序中是独立的,并发的执行流,但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存,文件句柄和其他每个进程应有的状态。2,线程比进程具有更高的性能,这是由于同一个...
  • 线程、进程、多线程、多进程 和 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    4 多线程 5 线程与进程的关系 6 线程和进程的区别 7 进程的优缺点 7.1 进程的优点 7.2 进程的缺点 8 线程的优缺点 8.1 线程的优点 8.2 线程的缺点 9 多线程的优缺点 9.1 多线程的优点 9.2 多线程的缺点 ...
  • Java多线程(一文看懂!)

    千次阅读 2021-07-28 17:36:15
    具有多线程能力的计算机因有硬件支持而能够同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。一个程序中
  • 【python】多线程详解

    千次阅读 2021-01-29 18:22:57
    二、线程基础1、线程的状态线程有5种状态,状态转换的过程如下图所示:2、线程同步(锁)多线程优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。考虑这样...
  • 系统接受实现多用户多请求的高并发时,通过多线程来实现。 二、线程后台处理大任务 一个程序是线性执行的。如果程序执行到要花大量时间处理的任务时,那主程序就得等待其执行完才能继续执行下面的。那用户就不得...
  • 单线程和多线程的优缺点

    千次阅读 2020-02-11 23:22:28
    单线程和多线程的优缺点 多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其...由于多线程应用程序将程序划分成独立的任务,因此可以以下方面显著提高性能: ...
  • >>号外:关注“Java精选”公众号,菜单栏->聚合->干货分享,回复关键词领取视频资料、开源项目。多线程使用的主要目的在于:1、吞吐量:你做WEB,容器帮你做了多...
  • 若一个进程中同一时间并行执行多个线程,就是支持多线程的。线程作为调度和执行的单位,每个线程都拥有独立的运行栈和程序计数器,一个进程中的多个线程共享相同的内存单元/内存地址空间——>他们从
  • Java:多线程:到底什么时候该用多线程

    万次阅读 多人点赞 2018-09-30 16:27:29
    系统接受实现多用户多请求的高并发时,通过多线程来实现。   二、线程后台处理大任务 一个程序是线性执行的。如果程序执行到要花大量时间处理的任务时,那主程序就得等待其执行完才能继续执行下面的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,674
精华内容 103,069
关键字:

多线程优势在哪