非线程安全问题 “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程问题”.也即是说,方法中的变量永远是线程安全的. 如果多个线程共同访问1个对象中的实例变量,则可能线程不安全.下面以实例说明 public class HasSelfNum { private int num = 0; public void add(String name) { try { if (name.equals("a")) { num = 100; System.out.pri…
多线程的同步 1. 锁对象. 应用场景:当某个数据可能被其他线程修改时,给涉及到数据的方法上锁,保证同一时刻只有拥有这个锁的线程能访问该数据,其他要调用这个方法的线程被阻塞.注意:必须是不同线程访问同一个对象的时候,其中的锁对象也是同一个. 应用方法: public class Bank { private Lock bankLock = new ReentrantLock(); public void Transfer() { bankLock.lock(); try { .... } fin…
(示例都是网上视频的) 假如两个线程同时调用一个方法输出字符串 public class SynchronizedTest extends Thread { public static void main(String[] args) { final SynchronizedTest st = new SynchronizedTest(); new Thread(new Runnable() { public void run() { while(true){ try { Thread.slee…
首先我们来看同步与死锁问题: 所谓死锁,就是A拥有banana.B拥有apple. A对B说:你把apple给我.我就把banana给你. B对A说:你把banana给我,我就把apple给你. 可是A和B都在等待对方的答复,那么这样终于的结果就是A得不到apple,B也得不到banana.这样的死循环就是死锁. 于是我们能够模拟上面的描写叙述.写出下面代码: 类A代表A这个人, public class A { public void say(){ System.out.println("A…
首先我们来看看同步与死锁: 所谓死锁.这是A有banana,B有apple. A至B说:你把apple对我来说,,我会banana给你. B至A说:你把banana对我来说,,我会apple给你. 可是A和B都在等待对方的答复.那么这样终于的结果就是A得不到apple,B也得不到banana.这样的死循环就是死锁. 于是我们能够模拟上面的描写叙述,写出下面代码: 类A代表A这个人. public class A { public void say(){ System.out.println("A…
一.通过模拟网络延迟,解决同步的问题. package com.zxf.demo; public class G01 implements Runnable{ private int num=10; private int count=0; @Override public void run() { // TODO Auto-generated method stub while (true) { count++; num--; System.out.println(Thread.current…