Java 线程以及sychronizd同步

来源:互联网 发布:网络教育什么专业好 编辑:程序博客网 时间:2024/06/13 21:34
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适合读远远多于写的场景,比如缓存,事务监听器等