线程同步
package cn.d.happy;
public class Printer {
    Object o=new Object();
    
    //或在void前加synchronized
    public void print1(){
        //同步代码块
         synchronized (o){
        System.out.print("线");
        System.out.print("程");
        System.out.print("同");
        System.out.print("步");
        System.out.println();
    }
    }
    public void print2(){
        synchronized (o){
        System.out.print("噢");
        System.out.print("呵");
        System.out.println();
    }
    }
}
定义两个线程类 并重写run方法。继承Thread 和 实现Runnable接口 通过for循环遍历次数
package cn.d.happy;
public class MyThread extends Thread{
    public Printer print;
    
    @Override
public void run() {
    //必须有该类的对象实例
    for (int i = 1; i <=10; i++) {
        print.print1();
    }
}
}
package cn.d.happy;
public class MyThread2 implements Runnable{
    public  Printer print;
    @Override
    public void run() {
         for (int i = 1; i <=10; i++) {
             print.print2();
        }
        
    }
}
测试类 创建打印机对象 以及两个线程对象并进行赋值
package cn.d.happy;
public class Test {
public static void main(String[] args) {
    //购买一个打印机
    Printer p=new Printer();
    
    //创建第一个线程对象  并且给属性赋值
    MyThread t1=new MyThread();
    t1.print=p;
    t1.start();
    
    
    //03.创建第二个线程对象 并且给属性赋值
      MyThread2 t2=new MyThread2();
      t2.print=p;
      Thread tt=new Thread(t2);
      tt.start();
}
}
实现效果:

原文:http://www.cnblogs.com/jingpeipei/p/5770590.html