线程同步处理

来源:互联网 发布:亚马逊 知乎 编辑:程序博客网 时间:2024/06/06 03:18


线程同步
被多个线程同时访问的资源叫做临界资源,当临界资源被多个线程同时访问的时候会出现一些隐患。
线程的同步就会为我们解决掉这一隐患。

下面列举一些多线程的隐患以及解决方法

public void run(){while(true){if(ticket>0){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口"+(ticket--)+"张票");}else{break;}}}
(只写了run方法里的代码)如果有两个线程同时执行会出现隔票或者出现0号票等问题

public void run(){while(true){//同步代码块synchronized(this){if(ticket>0){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口"+(ticket--)+"张票");}else{break;}}}}
加上synchronized的同步代码块就可以避免出现错误了也可以把方法利用synchronized改成同步函数也是可以避免的。(把synchronized加到void前面)