java中synchronized,线程同步
2016-10-28 11:15
127 查看
一、.线程同步
Java使用监控器(也称对象锁)实现同步。每个对象都有一个监控器,使用监控器可以保证一次允许一个线程执行对象的同步语句。即在对象的同步语句执行完毕之前,其他试图执行当前对象的同步语句的线程都将处于阻塞状态,只有线程在当前对象的同步语句执行完毕后,监控器才会释放对象,并让最高优先级的阻塞线程处理它的同步语句。
也可以这样理解对象锁,拨打公共信息服务台时,接话员可以被多个客户访问,但每次接话员只能服务一个客户。当其为某个客户服务时,其状态为"忙碌",其他客户只能等待。当接话员为当前的客户服务结束时,状态就变成“空闲”,可以为其他客户服务。
下述代码演示不使用同步机制可能出现的情况。
在java中使用synchronized关键字来实现对象锁。有两种方式使用synchronized:
1.同步方法
使用synchronized来修饰需要同步的方法。调整上述代码,只需将synchronized加到print前即可
2.同步块
只需将实例的对象放入同步块中即可,即:
Java使用监控器(也称对象锁)实现同步。每个对象都有一个监控器,使用监控器可以保证一次允许一个线程执行对象的同步语句。即在对象的同步语句执行完毕之前,其他试图执行当前对象的同步语句的线程都将处于阻塞状态,只有线程在当前对象的同步语句执行完毕后,监控器才会释放对象,并让最高优先级的阻塞线程处理它的同步语句。
也可以这样理解对象锁,拨打公共信息服务台时,接话员可以被多个客户访问,但每次接话员只能服务一个客户。当其为某个客户服务时,其状态为"忙碌",其他客户只能等待。当接话员为当前的客户服务结束时,状态就变成“空闲”,可以为其他客户服务。
下述代码演示不使用同步机制可能出现的情况。
public class Nosys { /** * @param args * */ public static void main(String[] args) { // TODO Auto-generated method stub Share share=new Share(); Caller caller1=new Caller(share, "A"); Caller caller2=new Caller(share, "B"); Caller caller3=new Caller(share, "C"); } } class Share{ void print(String str){ System.out.print("["+str); try{ Thread.sleep(1000); }catch(InterruptedException e){ } System.out.println("]"); } } class Caller implements Runnable{ String str; Share share; Thread thread; public Caller(Share share,String str){ this.share=share; this.str=str; //实例化进程 thread=new Thread(this); thread.start(); } public void run() { // TODO Auto-generated method stub share.print(str); } }可结果能为
在java中使用synchronized关键字来实现对象锁。有两种方式使用synchronized:
1.同步方法
使用synchronized来修饰需要同步的方法。调整上述代码,只需将synchronized加到print前即可
2.同步块
只需将实例的对象放入同步块中即可,即:
public void run() { // TODO Auto-generated method stub
synchronized(share){ share.print(str);
} }
相关文章推荐
- 使用java中的 synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- java 线程同步 synchronized
- (转)如何使用java synchronized进行线程同步
- Java--线程同步(使用了synchronized)和线程通讯(使用了wait,notify)
- 如何使用java synchronized进行线程同步
- Java 线程同步 synchronized
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步 .
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- Java线程(二):线程同步synchronized和volatile
- java 线程同步 synchronized
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- Java线程(二):线程同步synchronized和volatile
- java 线程同步 synchronized
- 【java】线程同步(synchronized,wait,notify,notifyAll)
- Java 线程同步 synchronized