草庐IT

多线段

全部标签

java - 我应该在多线程环境中使用对象池、单例还是静态方法?

我有一个帮助程序类可以创建一些对象,例如构建器。助手类没有状态。它在多线程环境中;具体来说,一个网络服务器。这个类适合成为单例吗?将此类作为单例实现与仅使用static方法有什么区别?成千上万的用户访问这个对象/这些方法会产生什么影响?我可以将该类设为常规类,但每次需要时都实例化它会浪费内存。 最佳答案 事实上,您可以使方法static而不是单例。单例不必只有1个,您可以创建一个实例池并根据需要委托(delegate)工作,因为您无法使用静态方法进行此类控制。关于SingletonvsStaticmethods的讨论是here

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录1、锁的策略1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁1.3、自旋锁和挂起等待锁1.4、普通互斥锁和读写锁1.5、公平锁和非公平锁1.6、可重入锁和不可重入锁 2、synchronized内部的升级与优化过程2.1、锁的升级/膨胀2.1.1、偏向锁阶段2.1.2、轻量级锁阶段2.1.3、重量级锁阶段2.2、锁消除2.3、锁粗化3、CAS(Compareandswap)3.1、CAS的应用3.1.1、实现Atomic原子类3.1.2、实现自旋锁3.1.3、CAS的ABA问题1、锁的策略加锁过程中,处理冲突的过程中,涉及到的一些不同的处理方式,就叫锁的策略。1.1、乐观锁和悲观锁 乐观

java - Spring 的多线程

我正在尝试进入spring多线程,我有几个问题。我在ThreadRating类中有可运行的方法。现在我不确定使用它的最佳方式。我找到的选项1:privatevoidupdateRating(){ExecutorServiceexecutor=Executors.newFixedThreadPool(10);for(inti=0;i这似乎运行良好。for循环后,等待线程执行完毕结束。我尝试的第二个选项privateTaskExecutortaskExecutor;publicUpdateBO(TaskExecutortaskExecutor){this.taskExecutor=task

java - 如何将多线程应用于反向传播神经网络训练?

在我的大学项目中,我正在创建一个神经网络,它可以对信用卡交易是否存在欺诈的可能性进行分类。我正在训练反向传播。我正在用Java写这个。我想申请多线程,因为我的电脑是四核i7。花几个小时训练却发现我的大部分核心都闲置着,这让我很烦。但是我如何将多线程应用于反向传播?反向传播通过网络向后调整错误来工作。一层必须先完成,另一层才能继续。有什么方法可以修改我的程序来处理多核背景吗? 最佳答案 首先不要使用反向传播。还有许多其他选择。我建议尝试RPROP(弹性传播)。对你的反向传播算法不会有太大的修改。您不需要指定学习率或动量。这几乎就好像神

多线程系列(十四) -一文带你搞懂线程池技术

一、前言虽然Java对线程的创建、中断、等待、通知、销毁、同步等功能提供了很多的支持,但是从操作系统角度来说,频繁的创建线程和销毁线程,其实是需要大量的时间和资源的。例如,当有多个任务同时需要处理的时候,一个任务对应一个线程来执行,以此来提升任务的执行效率,模型图如下:如果任务数非常少,这种模式倒问题不大,但是如果任务数非常的多,可能就会存在很大的问题:1.线程数不可控:随着任务数的增多,线程数也会增多,这些线程都没办法进行统一管理2.系统的开销很大:创建线程对系统来说开销很高,随着线程数也会增多,可能会出现系统资源紧张的问题,严重的情况系统可能直接死机假如把很多任务让一组线程来执行,而不是一

java - 用于处理并发用户的多线程 GAE servlet

我想对我的GAEservlet进行多线程处理,以便同一个实例上的同一个servlet可以处理多达10个(在前端实例上,我相信最大线程数是10)来自不同的并发请求用户在同一时间,他们每个人之间的时间片。publicclassMyServletimplementsHttpServlet{privateExecutorexecutor;@OverridepublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){if(executor==null){ThreadFactorythreadFactory=Thre

Java多线程初学者问题

我正在开发一个科学应用程序,它具有可以并行进行的易于分离的部分。因此,我将这些部分作为独立线程编写到每个运行中,尽管这似乎不是将事物分离到线程中的标准原因(即,不阻止某些退出命令等)。几个问题:这真的能在标准多核台式机上给我带来任何好处吗?也就是说,如果我有当前的JVM,线程实际上会在单独的内核上运行吗?还是我必须做其他事情?我几乎没有被所有线程读取(尽管从未写入)的对象。潜在的问题?那些问题的解决方案?对于实际的集群,您能否推荐将线程分配到各个节点的框架,这样我就不必自己管理(好吧,如果存在的话)?澄清:我的意思是,要么自动将线程转换为单个节点的任务,要么使整个集群看起来像一个JVM

常见的socket函数封装和多进程和多线程实现服务器并发

常见的socket函数封装和多进程和多线程实现服务器并发1.常见的socket函数封装2.多进程和多线程实现服务器的并发2.1多进程服务器2.2多线程服务器2.3运行效果1.常见的socket函数封装accept函数或者read函数是阻塞函数,会被信号打断,我们不能让它停止,所以我们应该进行一些封装操作。//wrap.h#ifndef__WRAP_H_#define__WRAP_H_#include#include#include#include#include#include#include#includevoidperr_exit(constchar*s);intAccept(intfd,

java - 当我在四核机器上使用多线程时,为什么这段代码看不到任何显着的性能提升?

我写了一些Java代码来学习更多关于Executor框架的知识。具体来说,我编写了代码来验证CollatzHypothesis-这表示如果您将以下函数迭代应用于任何整数,您最终会得到1:f(n)=((n%2)==0)?n/2:3*n+1CH仍未得到证实,我认为这是了解Executor的好方法。每个线程都分配了一个整数范围[l,u]来检查。具体来说,我的程序有3个参数-N(我要检查CH的数字)、RANGESIZE(线程必须处理的间隔的长度)和NTHREAD,线程池的大小。我的代码运行良好,但我看到的加速比我预期的要少得多——当我从1个线程变为4个线程时,加速大约为30%。我的逻辑是计算完

多线程基础详解(看到就是赚到)

🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏目录 创建线程 1.创建类继承Thread,重写run() 2.实现Runnable,重写run()3.继承Thread,使用匿名内部类 4.使用lambda表达式(推荐)线程启动 线程中断1.手动设置标志位2.使用内部自带的标志位(interrupt)线程等待 线程状态 线程安全 synchronized(可重入锁)使用方法 死锁关于死锁问题 死锁能产生,一定涉及到四个必要条件 volatile关键字(解决内存可见性问题)  创建线程 1.创建类继承Thread,重写run()classMy