|
实例一、静态方法的同步处理public class DataCopyA { public static void main(String[] args) { task(0, 5*1000*1); DataCopyB.task(0, 5 * 1000 * 1); } public static void task(long time, long time2) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { String str ="DataCopy-A"; //断点打于此处,进入方法体就会阻塞DataCopy-B的输出 DataCopyA.selectSql(str); } }; timer.schedule(task, time, time2); } protected synchronized static void selectSql(String str) { System.out.println("--------------------"); System.out.println(Thread.currentThread()); System.out.println(str); } }public class DataCopyB { public static void task(long startTime, int time2) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { String str ="CopyData-B"; DataCopyA.selectSql(str); } }; timer.schedule(task, startTime, time2); }}实例二、对同一对象的非静态方法处理public class DataCopyA { private DataCopyA() {} private static DataCopyA dataCopyA = new DataCopyA(); public static DataCopyA getInstance() { return dataCopyA; } public static void main(String[] args) { task(0, 5*1000*1); DataCopyB.task(0, 5 * 1000 * 1); } public static void task(long time, long time2) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { String str ="DataCopy-A"; //断点打于此处,进入方法体就会阻塞DataCopy-B的输出 DataCopyA.getInstance().selectSql(str); } }; timer.schedule(task, time, time2); } protected synchronized void selectSql(String str) { System.out.println("--------------------"); System.out.println(Thread.currentThread()); System.out.println(str); } }public class DataCopyB { public static void task(long startTime, int time2) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { String str ="CopyData-B"; DataCopyA.getInstance().selectS
|
|