一、线程同步,主要应用synchronized关键字:
public class TraditionalThreadSynchorinzed { public static void main(String[] args) { new TraditionalThreadSynchorinzed().init(); } private void init(){ final Outputer outputer = new Outputer(); new Thread(new Runnable(){ @Override public void run() { while(true){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } outputer.output("zhangxiaoxiang"); } } }).start(); new Thread(new Runnable(){ @SuppressWarnings("static-access") @Override public void run() { while(true){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } outputer.output3("lihuoming"); } } }).start(); } /** * synchronized 关键字可以使线程同步。如果它包含一个代码块,那么跟在括号后面的参数必须 * 保证唯一,不能使可变得。如果它作用在方法上,那么默认它的锁对象是this关键字。如果它作用在静态 * 方法上,它的锁对象是当前类字节码。 */ static class Outputer{ /** * output和output3同步,如果将output括号里面的字节码改成this关键字,那么output * 和output2同步。 * */ public void output(String name){ int len = name.length(); synchronized (Outputer.class) { for(int i=0;i<len;i++){ System.out.print(name.charAt(i)); } System.out.println(); } } public synchronized void output2(String name){ int len = name.length(); for(int i=0;i<len;i++){ System.out.print(name.charAt(i)); } System.out.println(); } public static synchronized void output3(String name){ int len = name.length(); for(int i=0;i<len;i++){ System.out.print(name.charAt(i)); } System.out.println(); } } }