java synchronized 学习
Java synchronized 学习 Java 中的 synchronized 关键字是用来实现线程同步的,它可以用来修饰方法、代码块和静态方法,以确保在多线程环境下数据的一致性。 一、进程和线程的区别 在计算机中,每个运行着的 xxxx.exe 都是一个进程,而线程可以理解为进程中独立运行的一个个子任务,一个进程至少包含了一个线程。 二、产生多线程的方法 常见的方法主要有两种: 1. 继承 Thread 类 2. 实现 Runnable 接口 三、停止线程的方法 1. 调用 Thread 中的 stop() 方法(已弃用) 2. 使用退出标志,可以使线程正常退出,也就是当 run() 方法完成后终止线程。 3. 使用 Thread 中的 interrupt() 方法(需结合 interrupted() 方法) 四、线程优先级 线程的优先级从 1~10,一共有十个级别,默认级别是 5,线程优先级别数字越大,优先级越高,线程优先级具有继承性、规则性、随机性。 五、非线程安全是如何产生的 非线程安全指多个线程同时对同一个对象的同一个实例变量进行读改操作,改变现有的值,此时会产生数据的脏读,导致数据不同步的情况,进而影响了程序的执行流程。 六、synchronized 同步锁概念及使用方法 Synchronized 同步锁的作用是解决多线程访问实例变量时可能造成的数据脏读现象。Synchronized 的使用方法有四种: 1. synchronized 修饰普通方法 2. synchronized 修饰普通代码块 3. synchronized 修饰静态方法 4. synchronized 修饰静态方法中的代码块 在使用 synchronized 同步锁时,需要注意以下几点: * 多个线程访问同一个对象的 synchronized 修饰的方法或代码块时,只允许一个线程拥有 synchronized 同步锁,其他线程只能进行等待。 * 若此对象对应的类中包含了多个 synchronized 修饰的方法或代码块,多个线程访问同一个对象的任意 synchronized 修饰的方法或代码块,只要有一个线程拥有了 synchronized 同步锁,其他线程不管想访问 synchronized 修饰的哪个方法或代码块,同样也会被阻塞。 通过使用 synchronized 同步锁,可以确保在多线程环境下数据的一致性和安全性。