线程Synchronized
来源:互联网 发布:html5动画制作软件 编辑:程序博客网 时间:2024/05/17 06:08
public class Demo1_Synchronized {
/** * @param args * 同步代码块 */public static void main(String[] args) { final Printer p = new Printer(); new Thread() { public void run() { while(true) { p.print1(); } } }.start(); new Thread() { public void run() { while(true) { p.print2(); } } }.start();}
}
class Printer {
Demo d = new Demo();
public void print1() {
//synchronized(new Demo()) { //同步代码块,锁机制,锁对象可以是任意的
synchronized(d) {
System.out.print(“1”);
System.out.print(“2”);
System.out.print(“3”);
System.out.print(“4”);
System.out.print(“5”);
System.out.print(“\r\n”);
}
}
public void print2() { //synchronized(new Demo()) { //锁对象不能用匿名对象,因为匿名对象不是同一个对象 synchronized(d) { System.out.print("A"); System.out.print("B"); System.out.print("C"); System.out.print("D"); System.out.print("\r\n"); }}
}
class Demo{}
public class Demo2_Synchronized {
/** * @param args * 同步代码块 */public static void main(String[] args) { final Printer2 p = new Printer2(); new Thread() { public void run() { while(true) { p.print1(); } } }.start(); new Thread() { public void run() { while(true) { p.print2(); } } }.start();}
}
class Printer2 {
Demo d = new Demo();
//非静态的同步方法的锁对象是神马?
//答:非静态的同步方法的锁对象是this
//静态的同步方法的锁对象是什么?
//是该类的字节码对象
public static synchronized void print1() { //同步方法只需要在方法上加synchronized关键字即可
System.out.print(“1”);
System.out.print(“2”);
System.out.print(“3”);
System.out.print(“4”);
System.out.print(“5”);
System.out.print(“\r\n”);
}
public static void print2() { //synchronized(new Demo()) { //锁对象不能用匿名对象,因为匿名对象不是同一个对象 synchronized(Printer2.class) { System.out.print("A"); System.out.print("B"); System.out.print("C"); System.out.print("D"); System.out.print("\r\n"); }}
}
public class Demo3_Ticket {
/** * 需求:铁路售票,一共100张,通过四个窗口卖完. */public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start();}
}
class Ticket extends Thread {
private static int ticket = 100;
//private static Object obj = new Object(); //如果用引用数据类型成员变量当作锁对象,必须是静态的
public void run() {
while(true) {
synchronized(Ticket.class) {
if(ticket <= 0) {
break;
}
try {
Thread.sleep(10); //线程1睡,线程2睡,线程3睡,线程4睡
} catch (InterruptedException e) {
e.printStackTrace(); } System.out.println(getName() + "...这是第" + ticket-- + "号票"); } }}
}
public class Demo4_Ticket {
/** * @param args * 火车站卖票的例子用实现Runnable接口 */public static void main(String[] args) { MyTicket mt = new MyTicket(); new Thread(mt).start(); new Thread(mt).start(); new Thread(mt).start(); new Thread(mt).start(); /*Thread t1 = new Thread(mt); //多次启动一个线程是非法的 t1.start(); t1.start(); t1.start(); t1.start();*/}
}
class MyTicket implements Runnable {
private int tickets = 100;
@Override
public void run() {
while(true) {
synchronized(this) {
if(tickets <= 0) {
break;
}
try {
Thread.sleep(10); //线程1睡,线程2睡,线程3睡,线程4睡
} catch (InterruptedException e) {
e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票"); } }}
}
public class Demo5_DeadLock {
/** * @param args */private static String s1 = "筷子左";private static String s2 = "筷子右";public static void main(String[] args) { new Thread() { public void run() { while(true) { synchronized(s1) { System.out.println(getName() + "...获取" + s1 + "等待" + s2); synchronized(s2) { System.out.println(getName() + "...拿到" + s2 + "开吃"); } } } } }.start(); new Thread() { public void run() { while(true) { synchronized(s2) { System.out.println(getName() + "...获取" + s2 + "等待" + s1); synchronized(s1) { System.out.println(getName() + "...拿到" + s1 + "开吃"); } } } } }.start();}
}
- 线程 synchronized
- 线程synchronized
- 线程Synchronized
- java线程:synchronized
- 线程同步---synchronized
- 线程同步synchronized
- 线程同步---synchronized
- cocoa线程同步synchronized
- 线程同步----synchronized
- 线程synchronized 例子
- synchronized线程同步
- 线程之synchronized 方法
- 线程之synchronized 块
- java 线程同步 synchronized
- java 线程同步 synchronized
- java synchronized 线程同步
- Java 线程同步 synchronized
- synchronized ReentrantLock 线程安全
- C#对图片进行马赛克处理,可控制模糊程度
- graph slam tutorial 从推到到应用二
- easyui datagrid 动态控制列的显示和隐藏
- 扫雷之逆向破解----增加秒杀功能(纯汇编)
- 圆的面积并 辛普森积分法模版
- 线程Synchronized
- bzoj1132 [POI2008]Tro 计算几何
- 【前端】学习心得1
- 乌龟git安装和使用
- iOS navigationController中回到tabbarController根视图方法
- json格式的字符串转换为json对象
- Linux下修改文件产生.swap文件错误
- python 列表操作
- Android第三方分享和登录之微信及QQ篇