随笔分类 -  线程与并发

摘要:1、在主函数中使用join()方法。 t1.start(); t2.start(); t3.start(); t1.join();//不会导致t1和t2和t3的顺序执行 t2.join(); t3.join(); System.out.println("Main finished"); 2、Coun 阅读全文
posted @ 2020-04-19 21:44 MrHH 阅读(763) 评论(0) 推荐(0)
摘要:在多线程的环境下,经常会遇到数据的共享问题,即当多个线程需要访问同一资源时,它们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,否则,程序的运行结果将会是不可预料的,在这种情况下,就必须对数据进行同步。 在Java中,提供了四种方式来实现同步互斥访问:synchronized、Lock、wa 阅读全文
posted @ 2020-04-19 13:25 MrHH 阅读(939) 评论(0) 推荐(0)
摘要:1、网站的高并发,大流量访问怎么解决? 1)HTML页面静态化 访问频率较高但内容变动较小,使用网站HTML静态化方案来优化访问速度。将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略。 优势: 减轻服务器负担。 加快页面打开速度,静态页面无需访问数据库,打开速度较动态 阅读全文
posted @ 2020-04-15 18:03 MrHH 阅读(470) 评论(0) 推荐(0)
摘要:1、Java中的同步容器类和缺陷 在Java中,同步容器主要包括2类: 1)Vector、HashTable。 2)Collections类中提供的静态工厂方法创建的类。Collections.synchronizedXXX()。 缺陷: 1)性能问题。 在有多个线程进行访问时,如果多个线程都只是进 阅读全文
posted @ 2020-04-13 14:50 MrHH 阅读(396) 评论(0) 推荐(0)
摘要:当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU高速缓存中,那么CPU进行计算时就可以从它的高速缓存读取数据和向其中写入数据,当运算结束后,再将高速缓存中的数据刷新到主存当中。举个简单的例子,比如下面的这段代码: i = i+1; 当线程执行这个语句时,会先从主存当中读取i的值,然后复制 阅读全文
posted @ 2020-04-13 12:20 MrHH 阅读(4058) 评论(1) 推荐(0)
摘要:一、乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据时都认为别人不会修改,所以不会上锁,但是在更新时会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写操作。 Jav 阅读全文
posted @ 2019-11-20 19:15 MrHH 阅读(542) 评论(0) 推荐(0)
摘要:一、线程与进程 线程:一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别形式,但多线程使用了更小的资源开销。 进程:一个进程包括有操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在。它必须是进程的一部分。一个进程 阅读全文
posted @ 2019-11-13 18:54 MrHH 阅读(990) 评论(0) 推荐(0)
摘要:一、线程池的工作原理 线程池的作用是有效的降低频繁创建销毁线程所带来的额外开销。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务。如果线程数量超过了线程池最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 它的主要特点为: 阅读全文
posted @ 2019-11-12 15:16 MrHH 阅读(295) 评论(0) 推荐(0)
摘要:一、阻塞队列(BlockingQueue):用于保存等待执行的任务。在阻塞队列中,线程阻塞的两种情况: 1、当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。 2、当队列中填满数据的情况下, 生产者端的所有线程都会被自动阻塞,直到队列中有空位置,线程被自动唤醒。 阅读全文
posted @ 2019-11-08 20:54 MrHH 阅读(915) 评论(0) 推荐(0)
摘要:AQS(全称为AbstractQueuedSynchronizer),即抽象队列同步器,它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列。 state的访问方式有:getState(); setState(); CompareAndState() AQS定义 阅读全文
posted @ 2019-10-28 15:01 MrHH 阅读(485) 评论(0) 推荐(0)
摘要:利用时间片轮转的方式,CPU给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一个任务后,继续服务下一个任务,这个过程叫做上下文切换。即对于单核CPU,CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。 线程上 阅读全文
posted @ 2019-10-23 21:22 MrHH 阅读(1578) 评论(0) 推荐(0)
摘要:ThreadLocal,即线程本地变量或线程本地存储。 Threadlocal相当于一个容器,用于存放每个线程的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。Threadlocal实例通常来说都是public static类型的。Thread 阅读全文
posted @ 2019-10-16 19:25 MrHH 阅读(1494) 评论(0) 推荐(0)