wait()、notify()、notifyAll()都是Object类中的final方法,被所有类继承且不允许重写,不可以在非同步方法中出现。
Thread.currentThread()返回正在实行的线程名称
Thread.interrupt()用于将当前线程的中断标志位设置为true,如果是wait、sleep、join造成的阻塞,会重新将标志位设置为false,抛出interruptedException异常。如果是IO阻塞会抛出异常,如果是轮询,直接返回。如果是非阻塞的线程,进入阻塞会按照阻塞来处理,非阻塞中断标志位为true的线程遇到wait、join、sleep,直接抛出interruptException,中断标记被清除,设置中断标志位为false。
CyclicBarrier(栅栏)让一组线程等待一个或一些线程,countDownLatch(闭锁)让一组线程等待某个事件。
CopyOnWriterArrayList适合使用在读操作远远大于写操作的场景中,比如缓存。
ReadWriteLock当写操作时,其他线程无法读取或写入数据,而当读操作时,其他线程无法写入数据,但可以读,适用于读取远远大于写入的场景。
Thread.stop()已经弃用。
Thread.suspend()和resume()方法:suspend()使线程进入阻塞状态,并不会自恢复,调用其resume()方法才能使其进入就绪队列。
线程安全问题出现的情况:
1,多个线程使用共用数据时
2,操作共享数据的线程代码
当一个线程在执行操作共享数据的多条代码的过程中,其他线程参与了运算。就会导致线程的安全问题。
解决思路:
就是将多条操作共享数据的线程封装起来,在有线程在执行这些代码的时候,其他线程是不可以参与运算的。
Synchronized :同步代码块:
Synchronize(对象)
{
需要被同步的代码;
}
同步的好处和弊端:
解决了线程的安全问题。
效率有一点点低。因为同步外的线程都会判断同步锁。
同步的使用前提:多线程才使用同步,多线程使用的为同一个锁才使用。
同步代码块:同步代码块的锁是任意的。
同步函数:主线程开启线程后,占用CPU,执行完语句。同步函数使用的锁是当前的对象this。
4、同步监视器:
任何线程进入同步方法,同步代码块之前,必须先获得同步方法,同步代码块对应的同步监视器。对于同步代码块,程序必须显式的为它指定同步监视器。
对于非静态同步方法,该方法的同步监视器是this--调用该方法的对象,
对于静态的同步方法,该方法的同步监视器是类。
Static Synchronized是一个类的共用监视器,synchronized是针对拥有同步方法的类 而存在的当前实例的监视器。
1、线程中锁:conditon线程的阻塞队使用的是condition互斥锁。
Condition是在JDK1.5中才出现,Condition的作用是对锁进行更精确的控制,拥有await()、signal()、signalAll()、用来替代传统的Object()的wait()、notify()、notifyAll()。不同的是,Object中的wait(),notify(),notifyAll()方法是和"同步锁"(synchronized关键字)捆绑使用的;而Condition是需要与"互斥锁"/"共享锁"捆绑使用的。调用await()和signal()都必须在lock.lock()和lock.unlock()之间有效。
2、线程调度分为协同调度和抢占性调度,Java使用的是抢占性调度,每个线程由操作系统分配执行时间。协同式调度是指调度线程由线程自身确定。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66099-14.html
历史已经证明
我爷爷一月2300
就是将剩余的小包或者再买同批次的打开