package day190109; public class 线程ThreadDemo04 { public static void main(String[] args) throws InterruptedException { A aa = new A(); aa.start();; A aaa = new A(); aaa.start(); Thread.sleep(2000); System.out.println(A.a); } } class A extends Thread{ public static int a; public static Object o = new Object(); /** * 线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护, * 其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 * 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据 * 线程安全:必须要使用很多<synchronized>关键字来同步控制,所以必然会导致性能的降低。 * 线程安全:是通过线程同步控制来实现的,也就是synchronized关键字。 */ /** * 死锁: * 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象, * 若无外力作用,它们都将无法推进下去。 * 产生死锁的4个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 */ @Override public void run() { synchronized (this) { for (int i = 0; i < 10000; i++) { a++; } } } }