java synchronized 简单示例
2016-03-29 21:59
423 查看
public class SequentialExample{ public static void main(String[] args) { Box box = new Box("test"); new Sequential("A", box).start(); new Sequential("B", box).start(); } } class Box { String name = null; public Box(String name) { this.name = name; } public String setName(String name) { this.name = name; return "null"; } public String getName() { return name; } } class Sequential extends Thread{ Box box = null; String name = null; public Sequential(String n, Box box) { super(n); this.box = box; } public void run() { for(int i = 0; i < 5; i++) { //可以删去synchronized(box) //可以删去{ try{ if(getName().equals("A")) { System.out.println("aaaaa"); System.out.println("setA:" + box.setName("AA")); Thread.sleep((long) 1000); System.out.println("AA:" + box.getName()); } else if(getName().equals("B")) { System.out.println("bbbbb"); System.out.println("setB:" + box.setName("BB")); Thread.sleep((long) 500); System.out.println("BB:" + box.getName()); } } catch(InterruptedException e) { e.printStackTrace(); } //可以删去} System.out.println("访问:" + getName()); } } }
没有加synchronized 结果如下:
加了synchronized结果如下:
初步结论是:
加了synchronized(object){}同步块之后
在多个线程同时运行这个同步块内的语句时,同时且只有一个线程可以操作这个同步块(?且对object这个对象上了锁,也可以说这个线程取得了这个object对象锁),当一个线程运行完这个同步块之(也释放这个object对象锁)后,另一个进程才可以运行这个同步块。这样就可以保证此时只有一个线程可以更改object 这个对象的属性。达到线程同步。
?当然还有跟高级的同步就是加入同步因子(信号量),这样可以完成更高级的信号量
前面有?的句子表示是不确定的语句。
相关文章推荐
- java-模拟tomcat服务器
- C#多线程之Thread中Thread.IsAlive属性用法分析
- Android开发笔记之:如何安全中止一个自定义线程Thread的方法
- java thread start()和run()方法简析
- Java中Runnable和Thread的区别分析
- Android开发笔记之:Handler Runnable与Thread的区别详解
- C#多线程之Thread中Thread.Join()函数用法分析
- Mysql Error Code : 1436 Thread stack overrun
- MySQL错误Forcing close of thread的两种解决方法
- c#线程Thread示例
- Android线程管理之ActivityThread
- Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法
- Java之Thread的join方法实例
- java中thread线程start和run的区别
- JAVA多线程Thread和Runnable的实现
- Java线程编程中Thread类的基础学习教程
- python开发之thread实现布朗运动的方法
- python相似模块用例
- python开发之thread线程基础实例入门
- java多线程编程之使用thread类创建线程