在线程同步中 当一个方法被标示为synchronize,则其他线程不可同时再访问,但可以访问其他的方法和属性,并且可改变数据。
实例:
package com.exmaple.Thread;
public class Test6 implements Runnable{
/**
* 在线程同步中 当一个方法被标示为synchronize,则其他线程不可同时再访问 * 但可以访问其他的方法和属性,并且可改变数据。 * @param args */ static Thread thread; private static Number num; public static void main(String[] args) { // TODO Auto-generated method stub num=new Number(); Test6 t=new Test6(); Thread t1=new Thread( t); t1.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } num.f2(); } @Override public void run() { // TODO Auto-generated method stub num.f1(); }}
class Number { int i=10; public synchronized void f1(){ i=100; try { Thread .sleep(5000); } catch (Exception e) { // TODO: handle exception } System.out.println("i="+i); } public void f2(){ try { Thread .sleep(2000); } catch (Exception e) { // TODO: handle exception } i=200; } }
说明:在主线程从创建了一个子线程, 子线程执行,i=100,进入睡眠,方法被锁定。同时,主线程执行下面的代码f2(),i被改变 i=200;,子线程睡眠唤醒,输出