线程_Tag标签_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
当前位置:程序员俱乐部 >>Tag标签 >> 线程 >>列表
本人新书《Java多线程编程实战指南(核心篇)》现已出版上市。豆瓣主页https://book.douban.com/subject/27034721/购买链接京东:https://item.jd.com/12184434.html亚马逊:https://www.amazon.cn/dp/B071RV8NLW互动出版网:http://product.china-pub.com/5661167当当:http://product.dangdang.com/25069727.html试读下载(待补充... 查看全文
项目运用rabbitMq实现的分布式架构,每台机器既是生成者也是消费者,改项目依赖于外部调度服务,mq的consumerlistener引用其他组的jar包(实现对外部资源的调用),消息消费是单线程的,在此调用jar包操作业务或者是个人代码写的有问题,可能导致线程死锁,或者其他代码问题(http请求未设置超时),导致消息消费被卡住,最终消息堆积。导致正常业务垮掉。既然consumer没配置消息的超时时间,java支持多线程,那么可以用来完美解决,worker线程执行任务... 查看全文
· Java线程知识拾遗发布时间:2017-04-09
知识回顾进程与线程是常常被提到的两个概念。进程拥有独立的代码段、数据空间,线程共享代码段和数据空间,但有独立的栈空间。线程是操作系统调度的最小单位,通常一个进程会包含一个或多个线程。多线程和多进程都可以实现并发处理,如nginx使用多进程方式、tomcat使用多线程方式、Apache支持混合使用。在C/C++等语言中可以同时使用多进程和多线程,而在Java中只能使用多线程。在Java中,创建线程的唯一方式是创建Thread类的实例,调用实例的start()方法启动线程... 查看全文
· Java 线程池发布时间:2017-03-19
1.newThread的弊端如下:a.每次newThread新建对象性能差。b.线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。c.缺乏更多功能,如定时执行、定期执行、线程中断。相比newThread,Java提供的四种线程池的好处在于:a.重用存在的线程,减少对象创建、消亡的开销,性能佳。b.可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。c.提供定时执行、定期执行、单线程、并发数控制等功能。2... 查看全文
本随笔续接:.NET同步与异步之警惕闭包(十)无论之前说的锁、原子操作还是警惕闭包,都是为安全保驾护航,本篇随笔继续安全方面的主题:线程安全的集合。先看一下命名空间:System.Collections.Concurrent,常用的类型有(均为泛型):BlockingCollection<T>、ConcurrentBag<T>、ConcurrentDictionary<TKey, TValue>、ConcurrentQueue<T>... 查看全文
· HashMap与线程安全发布时间:2017-03-15
HashMap与线程安全一、HashMap为何是线程不安全的HashMap是通过散列表来实现存储结构的,具体内容请看我的另一篇博客《HashMap深度解析》,那么HashMap为什么线程不安全呢,主要有两个原因。首先肯定是多个线程同时去往集合里添加数据,第一个原因:两个线程同时添加相同的key值数据,当两个线程同时遍历完桶内的链表时,发现,没有该key值的数据,这是他们同时创建了一个Entry结点,都添加到了桶内的链表上,这样在该HashMap集合中就出现了两个Key相同的数据。第二个原因... 查看全文
· C#多线程基础发布时间:2017-03-15
最近花了近两周时间读完了C#本质论,这本书非常喜欢,但是到后面关于多线程和同步这块,读起来就感觉有些困难了,所以做了笔记,一方面防止忘记,另一方法如果有不正确的地方,十分欢喜各位前辈不吝赐教什么是单线程通过一个控制台程序来认识单线程staticvoidMain(string[]args){varmainThread=Thread.CurrentThread;}在Console.WriteLine处添加一个断点,查看主线程属性ApartmentSate:msdn的大致意思... 查看全文
· 多线程并发、死锁发布时间:2017-03-15
1、Java并发性和多线程介绍引用http://tutorials.jenkov.com/java-concurrency/index.html在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战... 查看全文
最近在看一个同事的代码,代码的本意是在main方法中开启10个线程,用这10个线程来处理一批业务逻辑,在某一时刻当你命令console退出的时候,这个时候不是立即让console退出,而是需要等待10个线程把检测状态之后的业务逻辑执行完之后再退出,这样做是有道理的,如果强行退出会有可能造成子线程的业务数据损坏,没毛病吧,业务逻辑大概就是这样。一:现实场景由于真实场景的代码比较复杂和繁琐,为了方便演示,我将同事所写的代码抽象一下,类似下面这样,看好了咯~~~1classProgram2... 查看全文
· Java多线程CyclicBarrier学习发布时间:2017-03-11
Java多线程CyclicBarrier学习CyclicBarrier是多线程并发控制实用工具CyclicBarrier初始化时规定一个数目,然后调用await()方法进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续执行。await()方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此CyclicBarrier上面阻塞的线程开始运行。CyclicBarrier就象它名字的意思一样,可看成是个障碍... 查看全文
· quartz执行卡死--强制中断线程发布时间:2017-03-09
在quartz中经常会碰到由于网络问题或者一些其他不稳定因素导致的线程卡死问题,这往往会导致数据处理的延时。而有时候一时无法定位到卡死的原因,为了降低系统风险,我们就会希望有一个超时机制,当执行超时时强制中断该操作。下面就举个例子,ftp协议不稳定,当连接ftp上传下载数据时有时候会遇到不可知的因素会导致卡死,比如说主动被动切换,服务器连接数满等等,现在我们使用java提供的动态代理以及Future的超时机制来解决延时问题。代码如下... 查看全文
· 线程也疯狂----线程同步(1)发布时间:2017-02-10
前言当线程池的线程阻塞时,线程池会创建额外的线程,而创建、销毁和调度线程所需要相当昂贵的内存资源,另外,很多的开发人员看见自己程序的线程没有做任何有用的事情时习惯创建更多的线程,为了构建可伸缩、响应灵敏的程序,我们在前面介绍了线程也疯狂-----异步编程。但是异步编程同样也存在着很严重的问题,如果两个不同的线程访问相同的变量和数据,按照我们异步函数的实现方式,不可能存在两个线程同时访问相同的数据,这个时候我们就需要线程同步。多个线程同时访问共享数据的时,线程同步能防止数据损坏... 查看全文
· 线程池ThreadPool实现异步多线程发布时间:2017-02-07
ThreadPool线程池的主要方法:1.publicstaticBooleanQueueUserWorkItem(WaitCallbackwc,Objectstate);WaitCallback回调函数:通过将一些回调函数放入线程池中让其形成队列,然后线程池会自动创建或者复用线程去执行处理这些回调函数。State:这个参数也是非常重要的,当执行带有参数的回调函数时,该参数会将引用传入,回调方法中,供其使用。eg:用于文件处理... 查看全文
· Servlet之单例与线程安全发布时间:2017-02-07
一、Servlet是单例吗不是。1、你可以用多个URL映射同一个Servlet。这样就会出现多个实例。2、看看Servlet定义:引用Foraservletnothostedinadistributedenvironment(thedefault),theservletcontainermustuseonlyoneinstanceperservletdeclaration.如果servlet不是在分布式环境下(默认),servlet容器必须使一个servlet实例对应一个servlet声明... 查看全文
· 线程也疯狂-----异步编程发布时间:2017-02-05
前言本节主要介绍异步编程中Task、Async和Await的基础知识。什么是异步?异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。异步和多线程相同点:避免调用线程阻塞,从而提高软件的可响应性。不同点:异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能。C#5.0.NET4.5以后关键字Async和Await的使用... 查看全文
一、问题背景在使用多线程时,如果要开启一个任务,则就需要新建一个线程。线程也是对象,那么是否可以不用新建,而使用原来的呢?试试下面的方法:ThreadincT=newThread(newInc(c));ThreaddecT=newThread(newDec(c));for(inti=0;i<200;i++){incT.start();System.out.println("incT:"+incT.getName());decT.start();System.out.println... 查看全文
· 线程池增强实现发布时间:2017-01-20
前两天在开涛的公众号里,开涛聊到一次请求生成唯一的traceId在各个业务系统中传递,然后通过日志收集各个业务服务中的日志,形成一次请求的完整日志。开涛简单的提到了是使用自己实现的线程池增强技术来传递traceId。我这边系统也有类似的需求。所以我就尝试性地实现了下线程池增强。本来想着既然是增强,第一反应是用代理技术去实现,后来发现用装饰器模式就可以简单地实现。我大致的场景是把线程中附带的用户信息从当前线程传递到要开启的新的线程中去,并告诉MDC进行日志打印。下面简单介绍下代码的实现... 查看全文
概述虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于LinuxKernel的源码分析,今天要说的是JVM里比较常见的一个问题这个问题可能有几种表述一个Java进程到底能创建多少线程?到底有哪些因素决定了能创建多少线程?java.lang.OutOfMemoryError:unabletocreatenewnativethread的异常究竟是怎么回事不过我这里先声明下可能不能完全百分百将各种因素都理出来,因为毕竟我不是做LinuxKernel开发的... 查看全文
· 多线程之线程同步发布时间:2017-01-20
多线程内容大致分两部分,其一是异步操作,可通过专用,线程池,Task,Parallel,PLINQ等,而这里又涉及工作线程与IO线程;其二是线程同步问题,鄙人现在学习与探究的是线程同步问题。通过学习《CLRviaC#》里面的内容,对线程同步形成了脉络较清晰的体系结构,在多线程中实现线程同步的是线程同步构造,这个构造分两大类,一个是基元构造,一个是混合构造。所谓基元则是在代码中使用最简单的构造。基原构造又分成两类,一个是用户模式,另一个是内核模式... 查看全文
· .NET并行与多线程学习系列一发布时间:2017-01-15
并行与多线程学习系列一一、并行初试:1publicstaticvoidtest()3{5for(inti=0;i<10000;i++)7{9Console.WriteLine(i);11}13}1415publicstaticvoidtest1()17{19for(inti=0;i<10000;i++)21{23Console.WriteLine(i+"aaaaaaaaaaaaaaa");25}27}调用:1staticvoidMain(string[]args)3... 查看全文