线程同步:线程之间协调顺序访问共享资源,如A线程先访问公共资源后B线程才能访问同一个公共资源,这就是线程之间的同步
大致流图如下
场景:
A线程先打印数字1、2,B线程打A,然后依次A又开始打印3、4 ,B线程在打印B,直到打印完26个字母为止
代码如下:
public class ThreadCommunication { public static void main(String[] args) { PrintNumAndChar p = new PrintNumAndChar(); new Thread(new Runnable() { @Override public void run() { for (char i = 'A'; i <= 'Z'; i++) { p.printChar(i); } } }).start(); for (int i = 1; i <= 52; i++) { p.printNum(i); } } } class PrintNumAndChar { boolean isNumStart = true; int offset = 1; public synchronized void printNum(int i) { while (!isNumStart) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(i); if (offset % 2 == 0) { isNumStart = false; offset = 1; this.notify(); } else { offset++; } } public synchronized void printChar(char i) { while(isNumStart){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(i); isNumStart=true; this.notify(); } }