线程八锁即多线程的情况下由不同的调用方法或者限制来判断不同的执行结果.下面进行一一演示
示例1:这个例子的执行结果是 1,2 或者2,1,因为调用方法的时候 用了synchronized关键字,所以两个线程是互斥的,就看cpu先分配给线程a还是b了
示例2: 结果和实例1的结果一样,但有不同的地方就是,线程里面有休眠时间,两则是互斥的,所有执行a的时候会等待1秒才执行2
示例3:这个示例多了一个方法c 但是没有用synchronized来进行锁操作, 所以方法c在与 a,b 两个之间是并行的, c在任何时候都可能打印出来.
示例 4:这个示例出现了两个new对象来调用两个线程,所以两个之间不会有互斥问题,每个线程负责各自的对象,锁没有被排斥.所以两则是并行执行.
示例 5: a方法加了static,所以这个锁,锁住的是这个类的类对象.而b方法是锁的是this对象,所以两则锁的是不同的对象,两则没有互斥,所以是并行执行.
示例 6: 相对5来说,b方法也加了static,所以两则锁的都是类对象,有互斥关系,会阻塞,所以线程是一个一个执行的.
示例7:这个示例出现了两个new对象来调用两个线程,所以两个之间不会有互斥问题,每个线程负责各自的对象,锁没有被排斥.所以两则是并行执行. 和示例5一样
示例8:虽然两个方法调用的两个对象,但是两个方法都有static修饰,所以两个锁的都是类对象,而类对象只有一个,所以是互斥的,会阻塞,一个个执行.