1.使用情况:在多线程的情况下需要用到,比如public static变量,某一时刻只能一个线程进行操作并改变它的值,要用这个关键字来约束。来保证线程安全
2.简介:
并发的基础知识
什么是线程?
线程有时称为 轻量级进程。与进程一样,它们拥有通过程序运行的独立的并发路径,并且每个线程都有自己的程序计数器,称为堆栈和本地变量。然而,线程存在于进程中,它们与同一进程内的其他线程共享内存、文件句柄以及每进程状态。
线程有哪些功能?
使用线程的理由包括:
更易响应的用户界面。
使用多处理器。
简化建模。
异步或后台处理。 服务器应用程序可以同时服务于许多远程客户机。如果应用程序从 socket 中读取数据,并且没有数据可以读取,那么对 read() 的调用将被阻塞,直到有数据可读。在单线程应用程序中,这意味着当某一个线程被阻塞时,不仅处理相应请求要延迟,而且处理所有请求也将延迟。然而,如果每个 socket 都有自己的 IO 线程,那么当一个线程被阻塞时,对其他并发请求行为没有影响。
每个 Java 程序都使用线程
每个 Java 程序都至少有一个线程 ― 主线程。当一个 Java 程序启动时,JVM 会创建主线程,并在该线程中调用程序的 main() 方法。
结束进程:
1、run方法正常返回
2、run方法中断结束3、thread线程调用destory方法
中断线程:
if(!athread.isInterrupted()){ //thread线程非中断状态时,中断线程
at.interrupted();
}
防止并发修改异常方法:
1.加锁
2.读写分离技术 ,可采用CopyOnWriteArrayList处理
CopyOnWriteArrayList处理写操作是将原数据copy到一个新对象数组,在新数组上进行写,写完后将原来的引用指向当前对象数组
处理读操作是直接在当前对象上读,达到读写分离,因为写操作会造成大面积copy数组,性能低,所以CopyOnWriteArrayList适合读远远多于写的场景,比如缓存,事务监听器等