
【并发编程】
大阳彼岸
这个作者很懒,什么都没留下…
展开
-
threadlocal
线程范围内的共享变量package cn.itcast.heima2;import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopeShareData { private static int data = 0; public static void ma...转载 2018-07-12 20:06:11 · 141 阅读 · 0 评论 -
锁对象的改变
package extthread;import myservice.MyService;public class ThreadA extends Thread { private MyService service; public ThreadA(MyService service) { super(); this.service = service; } @Overrid...转载 2018-08-08 23:36:35 · 129 阅读 · 0 评论 -
并发大总结
在一个list中有过亿条的Integer类型的值,如何更快的计算这些值的总和?要学习的东西那么多!扶我起来。。转载 2018-08-18 10:54:17 · 181 阅读 · 0 评论 -
Java并发编程:同步容器
原创 2018-08-18 11:04:00 · 117 阅读 · 0 评论 -
wait/notify 方法线程间的通信,只随机通知一个线程进行唤醒,一次性唤醒所有线程, wait(long) 的使用,通知过早会打乱顺序正常的逻辑顺序
一.wait()、notify()和notifyAll() wait()、notify()和notifyAll()是Object类中的方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19...转载 2018-08-10 11:24:40 · 3599 阅读 · 0 评论 -
java并发包(一): Lock和ReadWriteLock
一.synchronized的缺陷二.java.util.concurrent.locks包下常用的类三.锁的相关概念介绍 Lock 主要解决的问题2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;...转载 2018-08-16 22:57:58 · 639 阅读 · 0 评论 -
java 并发包(二):线程池
package cn.itcast.heima2;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ThreadPoolTest { /** ...转载 2018-08-16 23:00:05 · 181 阅读 · 0 评论 -
java并发包:BlockingQueue
java并发包消息队列及在开源软件中的应用BlockingQueue也是java.util.concurrent下的主要用来控制线程同步的工具。主要的方法是:put、take一对阻塞存取;add、poll一对非阻塞存取。 插入: 1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则...转载 2018-08-16 23:01:54 · 134 阅读 · 0 评论 -
java并发编程的一些总结
java并发编程的一些总结.1. 不应用线程池的缺点有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(...).start(),对于一般场景是没问题的,但如果是在并发请求很高的情况下,就会有些隐患:新建线程的开销。线程虽然比进程要轻量许多,但对于JVM来说,新建一个线程的代价还是挺大的,决不同于新建一个对象资源消耗量。没有一个池来限制线程的数量,会导致线程的数量直...转载 2018-08-16 23:03:24 · 105 阅读 · 0 评论 -
CallableAndFuture
ExecutorService threadPool = Executors.newSingleThreadExecutor();Future<String> future =threadPool.submit( new Callable<String>() { public String call() throws Exception { ...转载 2018-08-20 15:25:13 · 138 阅读 · 0 评论 -
高并发解决方案--负载均衡
高并发解决方案--负载均衡1,什么是负载均衡?当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,...转载 2018-08-01 21:53:37 · 1011 阅读 · 0 评论 -
Semaphore
package cn.itcast.heima2;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class SemaphoreTest { public static void m...转载 2018-08-23 16:31:34 · 111 阅读 · 0 评论 -
synchronized 数据类型String常量池特性
package extthread;import service.Service;public class ThreadA extends Thread { private Service service; public ThreadA(Service service) { super(); this.service = service; } @Override publi...转载 2018-08-08 23:28:57 · 298 阅读 · 0 评论 -
任意对象可以作为监视器(锁)和其他的锁不是一个类型的锁
锁非this对象 具有一定的优点,如果在一个类中有多个synchronized的方法,这是虽然能使先同步,单会受到阻塞,所以影响运行效率,但是如果使用同步代码块锁非this对象,则synchronized (非this) 代码块中的程序与同步方法是异步的,不予其他锁this 同步方法争抢this 锁,则可以大大的提高效率。package extthread;import service.S...转载 2018-08-08 23:12:50 · 573 阅读 · 1 评论 -
进程和线程区别,进程和线程的并发操作是不同的
线程和进程各自有什么区别和优劣呢? 1 进程是资源分配的最小单位,线程是程序执行的最小单位。 2 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 3 线程之间的...转载 2018-07-12 16:35:51 · 1086 阅读 · 0 评论 -
线程运行快慢测试
线程运行快慢测试public class ThreadA extends Thread { private int count = 0; public int getCount() { return count; } @Override public void run() { while (true) { count++; } }}public ...转载 2018-07-19 17:31:21 · 236 阅读 · 0 评论 -
细说java线程的内存可见性
细说java线程的内存可见性可见性:一个线程对共享变量值(如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是在这几个线程的共享变量,这个里面的共享是指的是不是各线程都可以操作这个变量使这个变量在每个线程中都是同一个值,如果在每一个线程中的值是不同的话,那就是线程不安全的了)的修改,能够即使的被其他的线程看到线程的规定:线程对共享变量的所有操作必须在自己的内存中进行,不能直接...转载 2018-07-29 23:21:00 · 138 阅读 · 0 评论 -
多线程运行的原理,多线程与单线程比拼,多线程不一定就快
多线程运行的原理cpu在线程中做时间片的切换。其实真正电脑中的程序的运行不是同时在运行的。CPU负责程序的运行,而CPU在运行程序的过程中某个时刻点上,它其实只能运行一个程序。而不是多个程序。而CPU它可以在多个程序之间进行高速的切换。而切换频率和速度太快,导致人的肉眼看不到。每个程序就是进程, 而每个进程中会有多个线程,而CPU是在这些线程之间进行切换。了解了CPU对一个任务的执行过程...转载 2018-08-09 12:39:20 · 6457 阅读 · 1 评论 -
yield 方法
package extthread;public class MyThread extends Thread { @Override public void run() { long beginTime = System.currentTimeMillis(); int count = 0; for (int i = 0; i < 50000000; i++) { ...转载 2018-08-09 12:45:02 · 107 阅读 · 0 评论 -
synchronized 和volatile 进行一下比较
synchronized 和volatile 进行一下比较关键字volatile 解决的是变量在多个线程之间的可见性,而synchronized 关键字解决的是多个线程访问资源的同步性。线程安全包含原子性和可见性两个方面,java同步机制都是问绕这两个方面来确保线程安全的。关键字volatile 是线程同步轻量级实现,所以volatile 性能肯定比synchronized 要好,并且vo...转载 2018-08-09 15:12:02 · 153 阅读 · 0 评论 -
volatile 的可见性解读,synchronized 代码块有volatile 同步的功能
关键字volatile 主要的功能是使变量在多个线程间可见1 volatile 的作用就是强制从公共堆栈中取得变量的值,而不是从私有数据栈中取得变量的值1 多线程的方式 -------- 解决同步死循环下面的例子是产生死循环的代码package printstring;public class PrintString { private boolean isContinueP...转载 2018-08-09 21:32:30 · 573 阅读 · 0 评论 -
synchronized : 一半同步一半异步 2 方法内部的私有变量,则不存在非线程安全的问题 1 多个对象,多个锁 2 同步不具有继承性 3 证明线程锁是对象4 锁重入5 出现异常,锁自动释放
synchronized 实现同步的基础:1 普通同步方法,锁是当前实例对象2 静态同步方法,锁是当前类的class 对象3 同步方法块,锁括号里面的对象不在synchronized 就是异步执行的,在synchronized 块就是同步执行一半同步一半异步package mytask;public class Task { public void doLongTim...转载 2018-08-07 22:23:42 · 227 阅读 · 0 评论 -
多线程入门,线程isAlive 方法,this与Thread.currentThread() 的区别,线程优先级,线程运行快慢测试
package test;public class Test { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); }} 只有thread 类才有start 方法public class MyRunnab...转载 2018-08-06 14:53:03 · 301 阅读 · 0 评论 -
守护线程,
java线程中有两种线程,一种是用户线程,另一种是守护线程守护线程是一种特殊的线程,他的特性有陪伴的含义,当进程中不存在非守护线程,则守护线程自动销毁,典型的守护线程就是垃圾回收线程,当进程中没有守护线程了,则垃圾回收线程也就没有存在的必要了,自动销毁,用比较通俗的比喻来解释一下,守护线程:任何一个守护线程都是整个jvm 中所有非守护线程的的保姆,只要当前JVM案例中存在任何一个费守护线程没有...转载 2018-08-06 16:19:25 · 123 阅读 · 0 评论 -
并发编程总结
对于存储数据的容器或者对象,有线程安全和线程不安全之分1 对于线程不安全的容器或对象,一般可以通过加锁或者通过copy on write 的方法控制并发访问2 对于线程安全的容器和对象,我们就可以在多线程环境下直接使用他们了,在这些线程安全的容器和对象,有些是支持开发的,这种方式的效率回避简单的加互斥锁的实现更好,例如 java.util.concurrent 包中有很多这样的容器类3...转载 2018-08-11 21:27:32 · 221 阅读 · 1 评论 -
脏读可能出现的几种情况
脏读可能出现的情况1package entity;public class PublicVar { public String username = "A"; public String password = "AA"; synchronized public void setValue(String username, String password) { try { t...转载 2018-08-07 22:05:55 · 1554 阅读 · 0 评论 -
synchronized 的弊端: 耗时过长解决方法:用同步代码块解决时间太长的弊端,但是同步代码块也是有弊端的
1 耗时过长 package commonutils;public class CommonUtils { public static long beginTime1; public static long endTime1; public static long beginTime2; public static long endTime2;}package mytas...转载 2018-08-08 23:29:19 · 6086 阅读 · 0 评论 -
验证同步synchronized(this) 代码块是锁定当前对象的(synchronized 方法一样, synchronized(this) 也是锁定当前对象的)
与synchronized 方法一样, synchronized(this) 也是锁定当前对象的package mytask;public class Task { synchronized public void otherMethod() { System.out.println("------------------------run--otherMethod"); } p...转载 2018-08-07 23:30:47 · 1346 阅读 · 1 评论 -
synchronized关键字加到static静态方法和synchronized关键字加到非static静态方法不是同一个锁也不存在前者包含后者的关系
synchronized关键字加到static静态方法上是给Class类上锁而加到非static静态方法是给对象加锁为了验证不是同一个锁 验证代码如下package com.test.Thread.t10;/** * @author admin * 2017年4月20日 */public class Service { synchronized public sta...转载 2018-08-08 17:02:24 · 1080 阅读 · 0 评论 -
Condition
Condition Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,在阻塞队列那一篇博文中就讲述到了,阻塞队列实际上是使...转载 2018-08-24 09:44:20 · 117 阅读 · 0 评论