多线程之同步和死锁
在多线程的开发中, 同步与死锁的概念非常重要
我需要知道的是 那里需要同步
如何实现同步 代码了解即可
![]()
出现了负数 说明那个地方出错了 相信大家 也看了 这个程序分为两个步骤
这样大家都看的出效率降低了好多
还有一种方法 synchronized关键字将一个方法声明成同步方法
synchronized 方法返回值 方法名称(参数列表){}
我需要知道的是 那里需要同步
如何实现同步 代码了解即可
以及实现同步之后 有哪些副作用
接下来以买火车票为例
package ThreadTest; class Tong implements Runnable{ private int ticket=5; public void run() { for (int i = 0; i < 100; i++) { if (ticket>0) {//还有票 try { Thread.sleep(1000);//加入yanchi } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("卖票:ticket="+ticket--); } } } } public class TongBuDemo { public static void main(String[] args) { Tong tong=new Tong();//定义线程对象 Thread t1=new Thread(tong);//定义Thread实例 Thread t2=new Thread(tong); Thread t3=new Thread(tong); t1.start(); t2.start(); t3.start(); } }
出现了负数 说明那个地方出错了 相信大家 也看了 这个程序分为两个步骤
这时候就需要用同步代码块 同步就是指:多个操作在同一个时间段内只能有一个线程
其他线程只有等这个线程技术才能执行
代码块上加入synchronized关键字 就是同步代码块
package ThreadTest; class Tong implements Runnable{ private int ticket=5; public void run() { for (int i = 0; i < 100; i++) { synchronized (this) {//要对当前对象进行同步 if (ticket>0) {//还有票 try { Thread.sleep(1000);//加入yanchi } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("卖票:ticket="+ticket--); } } } } } public class TongBuDemo { public static void main(String[] args) { Tong tong=new Tong();//定义线程对象 Thread t1=new Thread(tong);//定义Thread实例 Thread t2=new Thread(tong); Thread t3=new Thread(tong); t1.start(); t2.start(); t3.start(); } }
这样大家都看的出效率降低了好多
还有一种方法 synchronized关键字将一个方法声明成同步方法
synchronized 方法返回值 方法名称(参数列表){}
package ThreadTest; class Tong implements Runnable{ private int ticket=5; public void run() { for (int i = 0; i < 100; i++) { // synchronized (this) {//要对当前对象进行同步 this.sale(); } } private synchronized void sale() { if (ticket>0) {//还有票 try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("卖票:ticket="+ticket--); } } } public class TongBuDemo { public static void main(String[] args) { Tong tong=new Tong();//定义线程对象 Thread t1=new Thread(tong);//定义Thread实例 Thread t2=new Thread(tong); Thread t3=new Thread(tong); t1.start(); t2.start(); t3.start(); } }