
并发编程
文章平均质量分 64
计算机编程老师
这个作者很懒,什么都没留下…
展开
-
Executor并发框架
介绍随着当今处理器中可用的核心数量的增加, 随着对实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行。 Java 提供了自己的多线程框架,称为 Executor 框架.1. Executor 框架是什么?Executor 框架包含一组用于有效管理工作线程的组件。Executor API 通过 Executors 将任务的执行与要执行的实际任务解耦。 这是 生产者-消费者 模式的一种实现。java.util.concurrent.Executors 提供了用于创建工作线程的线程池的工厂方法。原创 2021-01-06 14:23:21 · 1235 阅读 · 0 评论 -
Spring 注解编程IOC
Bean 注册注册Bean的常用注解有@Component、@Service、@Controller、@Repository,通过扫描包的方式对这些注解进行解析注册Bean。注解ApplicationContext:AnnotationConfigApplicationContext常用注解@Configuration声明Bean Difinition的配置文件,相当于一个xml文件@Bean声明Bean的组件@Configurationpublic class CustomConfig原创 2021-01-05 17:51:28 · 2122 阅读 · 0 评论 -
并发挑战(三)
资源限制挑战资源限制资源限制是说,在进行并发编程时,理论上可以达到理想的状态,但是犹豫硬件和软件的一些配置问题,达不到理想状态。比如说:服务器带宽2Mb/s,某个资源下载速度为1Mb/s,系统同时启动10个并行任务,下载速度不会达到10Mb/s,所以在进行并发编程时,需要考虑这些资源限制问题。如:硬件带宽的上传和下载速度、硬盘读写速度以及CPU的处理速度,软件方面比如说数据库的连接数和socket的连接数等。资源限制引发的问题在并发编程中,将代码执行速度加快的原则是:把原本串行的任务变为并行执行,但原创 2021-01-05 17:41:03 · 1046 阅读 · 1 评论 -
并发挑战(二)
死锁锁是一个很有用的工具,运用的场景也多,使用也简单,但是,锁使用不当也会出现一系列维妮塔,比如说:死锁,一旦产生死锁,会造成系统功能无法使用。例如:public class DeadLockDemo { private static String A = "A"; private static String B = "B"; private void deadLock(){ Thread t1 = new Thread(()->{原创 2021-01-05 17:00:30 · 1072 阅读 · 4 评论 -
并发挑战(一)
并发的目的并发编程的目的是为了让程序运行的更快一点,但是,并不是启动更多的线程就可以让程序执行的效率更高,运行更快。进行并发编程时,如果希望通过多线程执行让程序变得更快,会面临非常大的挑战,如:上下文切换、死锁以及受限制于阴间和软件的资源限制等问题。上下文切换单核处理器也支持多线程去执行代码,CPU是通过给每个程序分配时间片来实现并行机制。时间片是CPU分配给各个线程的时间。时间片非常短,CPU通过不断切换线程执行,让我们感觉上是并发执行。CPU通过时间片分配算法来循环执行任务,当前时间片执行完成之原创 2021-01-05 16:00:55 · 1531 阅读 · 1 评论 -
高并发服务发现原理
在一个超大型的系统中,有100K个Client,也就是10万个服务,这么多个服务定时向Eureka注册中心请求发现服务时,应该怎样处理?首先,我们可以让多个Eureka相互注册构成集群,多个服务向集群内的不同Eureka定时请求发现服务,不同的Eureka之间会相互同步服务地址数据。Eureka的部署方式如下图所示:一、 Eureka单点二、 两台Eureka相互注册三、 三台Eureka相互注册通过上面的图示我们可以发现,随着集群内Eureka数量的增多,E原创 2021-01-05 15:05:24 · 1237 阅读 · 0 评论 -
并发编程之多线程
进程和线程的区别进程是线程的集合,每一个线程是进程中的一条执行路径什么是多线程?为什么要使用多线程?多线程:同一个进程中同一时间执行多于一个线程多线程能够提高程序效率例如:迅雷多线程下载,数据库连接池多线程的创建方式1. 继承Thread类重新run方法 class CreateThread extends Thread { // run方法中编写 多线程需要执行的代码 public void run() { for (inti = 0; i< 10; i+原创 2021-01-04 17:32:57 · 1067 阅读 · 0 评论 -
如何优雅的结束一个线程!
停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。使用interrupt方法中断线程。1、停止不了原创 2020-12-31 16:20:45 · 1380 阅读 · 0 评论 -
线程的基础回顾
1.死锁/活锁(线程没有出现阻塞,一直处于等待的状态)死锁:一组互相竞争的资源的线程之间互相等待,导致永久阻塞现象。活锁:线程没有出现阻塞,一直处于等待的状态.2.死锁满足的条件这四个条件同时满足,就会产生死锁。互斥,共享资源X和Y只能被一个线程占用。占有且等待,线程T1已经取得共享资源X,在等待共享资源Y的时候,不释放共享资源X不可抢占,其他线程不能强行抢占线程T1占有的资源。循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,就是循环等待。、死原创 2020-12-31 14:42:55 · 1064 阅读 · 0 评论 -
线程池自引发死锁
线程池自引发死锁死锁是由许多线程锁定相同资源引起的如果在该池中运行的任务内使用线程池,也会发生死锁像RxJava / Reactor这样的现代图书馆也很容易受到影响死锁是两个或多个线程正在等待彼此获取的资源的情况。例如,线程A等待lock1线程B锁定,而线程B等待lock2,由线程A锁定。在最坏的情况下,应用程序冻结无限期的时间。让我向您展示一个具体的例子。想象一下,有一个Lumberjack类可以保存对两个附件锁的引用:import com.google.common.colle原创 2020-12-30 17:39:22 · 2110 阅读 · 0 评论 -
Java并发编程基础篇(一)之线程
前言并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最 大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会 面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题。这一块内容也是面试核心考点之一,所以博主将以线程为起点,从0到1一起与小伙伴们走去Java并发编程之路上走一遭!正文进程?线程?傻傻分不清?何谓进程进程通常是程序、应用的同义词。进程的本质是一个正在执行的程序,程序运行时系统会创建一个进程,并且给每原创 2020-12-29 16:56:26 · 2569 阅读 · 1 评论