并发的专业描述:在操作系统中,一段时间内有几个程序都处于启动到结束之间的状态,并且这几个程序都交替运行在同一个处理器上,这种情况就叫并发。
对服务器而言,并发量是当前保持的连接数
https://www.cnblogs.com/fubaizhaizhuren/p/6381567.html
并发时,如果线程或进程访问的是同一资源,需要进行同步。同步可以发生在进程之间,也可以发生在线程之间。
线程同步
当多个线程需要访问同一资源时,需要以某种机制来确保某一时刻只能有一个线程才能访问这个资源,这种机制就是线程同步。
在java中,实现线程同步这种机制的手段主要有同步方法和同步代码块,这两种方式都是用synchronized关键字实现。
无论同步方法还是同步代码块,都必须使用对象锁。当一个线程要执行某个同步方法或某段同步代码块时,该线程就必须拥有对象锁,直到该线程完成后才会释放对象锁,而其他没能获得该对象锁的线程则被阻塞,直到对象锁被释放后才能有机会获得对象锁并执行同步方法或同步代码块。
更进一步地,不仅是只有获得对象锁的线程才有资格执行同步方法或同步代码块,这种机制还能确保同一时刻对应每一个实例,其所有声明为synchronized的同步方法或同步代码块同一时刻只能有一个处于可执行状态,从而有效避免了类成员变量的访问冲突。大白话就是,比如存取款系统中同时synchronized的存款和取款两个方法,假如有一个线程要存款,另一个线程要取款,同一时刻也只能有一个线程拥有对象锁,要么在存款,要么在取款,两者不会同时进行。
对象锁存在JVM的堆中,一个JVM进程内只有一个,所有线程都位于同一JVM进程内,它们共享一个对象锁。
研究线程同步最好的例子有银行存取款系统,即同一账户下几个用户使用一个银行账号进行存取款,其本质是一个进程内多个线程访问同一资源。此外还有抢票系统和银行转账系统。
参考:https://blog.youkuaiyun.com/weixin_39727976/article/details/112082716
https://blog.youkuaiyun.com/weixin_29056145/article/details/114402668
进程同步
参考:https://www.cnblogs.com/kexinxin/p/9939078.html