Java并发编程
hi168
念念不忘,必有回响
展开
-
Java并发总结(高级)
1.谈谈 synchronized和ReenTrantLock 的区别① 两者都是可重入锁两者都是可重入锁。“可重入锁”概念是:自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。② syn...原创 2020-03-07 02:04:55 · 207 阅读 · 0 评论 -
sychronized总结(包括sychronized底层实现原理)
一.sychronized的特性1.原子性:一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。注意:一条 java 语句不一定是原子的,也不一定只是一条指令。2可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。所有的变量都存储在主内存中。每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中...原创 2020-03-06 16:01:20 · 921 阅读 · 0 评论 -
Java并发总结(基础)
一.并发基础1.什么是进程,什么是线程?进程与线程之间的区别。进程:操作系统中一个程序的执行周期称为一个进程。线程:一个程序同时执行多个任务。通常,每个任务就称为一个线程。没有进程就没有线程,进程一旦终止,其内的线程也将不复存在。多进程与线程的区别:(1)根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。(2)线程依赖于进程而存在,一个线程只能属于一个进程,...原创 2020-03-05 23:54:24 · 167 阅读 · 0 评论 -
Thread和Runnable的区别
实现Runnable接口比继承Thread类所具有的优势:1.避免了单继承的局限性一个类只能继承一个类(一个子类只能有一个父类),类继承了Thread类就不能继承其他的类。而实现了Runnable接口,还可以继承其他的类,实现其他的接口。2.增强了程序的扩展性,降低了程序的耦合性(解耦),代码和线程独立。实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离(解耦)实现类...原创 2020-02-05 14:49:17 · 103 阅读 · 0 评论 -
线程间通信
——引入线程间进行通信后大大提高了CPU的利用率,也会使程序员对各线程的处理过程进行有效把控与监督。Java在Object类中提供了wait()、notify()、notifyAll()等方法用于解决线程间的通信问题,由于Java中所有类都是Object类的子类或间接子类,因此任何类的实例对象都可以直接使用这些方法。线程间通信的常用方法:1>void wait():使当前线程放弃同步...原创 2019-11-13 17:26:22 · 202 阅读 · 0 评论 -
完美诠释-------单例模式(饿汉式与懒汉式(含双重加锁))与多线程
------引入我们在使用Windows的时候无法同时打开两个任务管理器,也就是说,它在整个系统中只有一个唯一的一个实例。怎样实现在一个系统中某个类的实例只能唯一存在呢?单例模式就是很好的解决方法。单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式包含的角色只有一个,那就是单例类——Singleton。一.饿汉模式在这个类被加载时,静态变量instance会被初...原创 2019-11-11 19:01:50 · 217 阅读 · 0 评论 -
逐渐深入线程安全问题及线程的同步
1.线程安全我们在售票的时候,可能会出现"意外情况",例如,一张票被打印多次,或者打印出的票数为0甚至为负数。这些情况都是有多线程操作共享资源所导致的线程安全问题。–一会再更新...原创 2019-11-11 14:07:17 · 192 阅读 · 0 评论 -
线程的状态及其转化
当Thread对象创建完成时,线程的生命周期便开始了。当线程任务中代码正常执行完毕或者线程抛出一个未捕获的异常或者错误时,线程的生命周期便会结束。Java中线程的状态可以分为6个状态,分别是NEW(新建状态)、RUNNABLE(可运行状态)、BLOCKED(阻塞状态)、WAITING(等待状态)、TIMEDWAITING(定时等待状态)、TERMINATED(终止状态)。1.NEW(新建状态)...原创 2019-11-09 19:45:37 · 282 阅读 · 0 评论 -
线程的中断方法与判定中断状态方法(重要区别interrupted&isInterrupted)
一.线程的中断方法中断线程目前常见的有以下两种方式:1.通过退出标记使线程正常退出2.调用 interrupt() 方法来通知3.(调用stop(),这个方法已经弃用,原因是可能会造成意想不到的结果)使⽤stop⽅法强制使线程退出,但是该⽅法不太安全所以已经被废弃了。为什么说不安全呢?因为stop会解除由线程获取的所有锁定,当在⼀个线程对象上调⽤stop()⽅法时,这个线程对象所运...原创 2019-11-09 18:21:33 · 1043 阅读 · 0 评论 -
多线程的常用操作方法
1.线程名字的取得示例1:class MyThread implements Runnable { public void run() { for (int i = 0; i < 5; i++) { System.out.println("当前线程:" + Thread.currentThread().getName() + ",i=" + i); } }}pub...原创 2019-09-02 22:01:30 · 103 阅读 · 0 评论 -
Java多线程的实现
Java多线程的实现:1.继承Thread类步骤:(1)创建一个Thread线程类的子类(子线程),同时重写Thread类的run方法;(2)创建稿子类的实例对象,并通过调用start()方法启动线程。示例1:class MyThread extends Thread { private String title; public MyThread(String title) {...原创 2019-09-02 16:19:07 · 153 阅读 · 0 评论 -
线程与进程的区别
1.java的一大特色:支持多线程。2.进程:操作系统中一个程序的执行周期称为一个进程。线程:一个程序同时执行多个任务。通常,每个任务就称为一个线程。没有进程就没有线程,进程一旦终止,其内的线程也将不复存在。3.多进程与线程的区别:本质区别在于,每个系统拥有自己的一整套变量,而线程则共享变量。共享变量使得线程之间的通信比进程之间的通信更有效、方便。4.高并发:访问的线程量非常非常高。带来...原创 2019-09-02 14:43:10 · 120 阅读 · 0 评论