保证多线程运行安全可以理解有以下几种方式:
1、将run()方法中涉及到的赋值代码放入同步代码块中,即synchronized(obj){赋值代码},obj相当于一把锁;
2、将run()方法中要调用到的函数同步,即对函数同步;
3、创建一个锁对象,是之后的升级版本,即,Lock lock =new ReentrantLock();在运行代码的前上锁Lock.lock,线程运行完后释放锁,Lock.unlock。
特别注意的是:当多个线程操作同一资源时(或者涉及到同步嵌套时),所使用到的对象锁必须是同一个,否则会造成死锁或者数据混乱,同时为了保证线程交替运行,需要在运行代码中写入wait()冻结线程和notifyAll()唤醒机制,否则会造成线程一直处于休眠状态。。。
个人理解,可能有一定的不全,仅供交流 |