当提起这三个词的时候,是不是很多人都认为分布式=高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼? 确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗? 实际上,他们三个总是相伴而生,但侧重点又有不同。 什么是分布式? 分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。 该领域需要解决的问题极多,在不同的技术层面上…

2019年10月18日 0条评论 576点热度 0人点赞 李锋镝 阅读全文

什么是线程安全? 线程安全是指保证多线程环境下共享的、可修改的状态的正确性。 线程安全需要保证几个基本特性 原子性:相关操作不会中途被其他线程干扰,一般通过同步机制实现。 可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile就是负责保证可见性的。 有序性:保证线程内串行语义,避免指令重排。 大部分情况下,为了保证线程安全,就要用到锁,加上锁后,每次只允许一个线程运行这段代码,也就是每个时间只能有一个线程访问共享数据。这样就实现了线程安全。 JA…

2019年10月12日 0条评论 575点热度 0人点赞 李锋镝 阅读全文

volatile作用 volatile主要是为了解决多线程内存不可见问题。 对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。 其次是为了保证代码的有序性。 虚拟机在编译的时候,是有可能把代码的顺序进行重排序的,不一定会按照我们写的代码的顺序来执行,对于有些代码进行重排序之后,虽然对变量的值没有造成影响,但有可能会出现线程安全问题的。 如果一个变量被声明volatile的话,那么这个变量不会被进行重排序,也就是说,虚拟机会保证这个变量之前的代码一定会比它先执行,而之后的代码一定会比它慢执…

2019年10月11日 0条评论 622点热度 1人点赞 李锋镝 阅读全文

序 为什么要用线程池?什么情况下才会用到线程池? 并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 因此,就用到了线程池;线程池中的线程可以复用,就是执行完一个任务,并不被销毁,而是继续执行下一个任务。 如下使用线程: public class Test{ public static void main(String[] args) { long start = System.currentTimeMillis(); f…

2019年6月13日 0条评论 619点热度 0人点赞 李锋镝 阅读全文