Thread(下) 【016】

-------[size=medium][color=red]TestDeadLock[/color][/size]------------------------------------------------------------------------
[code]
package com.testthread2;

public class TestDeadLock implements Runnable {
public int flag ;
static Object o1 = new Object() ;
static Object o2 = new Object() ;
public void run() {
System.out.println("flag" + flag) ;
if(flag == 1) {
synchronized(o1) {
try {
Thread.sleep(500) ;
} catch (Exception e) {
e.printStackTrace() ;
}
synchronized(o2) {
System.out.println("1") ;
}
}
}
if(flag == 0) {
synchronized(o2) {
try {
Thread.sleep(500) ;
} catch(Exception e) {
e.printStackTrace();
}
synchronized(o1) {
System.out.println("0") ;
}
}
}
}

public static void main(String args[]) {
TestDeadLock td1 = new TestDeadLock() ;
TestDeadLock td2 = new TestDeadLock() ;
td1.flag = 1 ;
td2.flag = 0 ;
Thread t1 = new Thread(td1) ;
Thread t2 = new Thread(td2) ;
t1.start();
t2.start();
}

}

[/code]

-------[size=medium][color=red]TestSynchronized[/color][/size]------------------------------------------------------------------------
[code]
package com.testthread2;

// 两个进程同时调用同一个方法
public class TestSync implements Runnable{
Timer timer = new Timer() ;
public static void main(String args[]) {
TestSync test = new TestSync() ;
Thread t1 = new Thread(test) ;
Thread t2 = new Thread(test) ;
t1.setName("t1") ;
t2.setName("t2") ;
t1.start();
t2.start();
}
public void run() {
timer.add(Thread.currentThread().getName()) ;
}
}

class Timer {
private static int num = 0;

public synchronized void add(String name) { //用synchronized锁定当前对象
num++;
try {
Thread.sleep(1);
} catch (InterruptedException e) {

}
System.out.println(name + ",,你是第" + num + "个使用timer的线程");

}
}

[/code]

-------[size=medium][color=red]Synchronized or NoSynchronized[/color][/size]------------------------------------------------------------------------

[code]
package com.testthread2;

public class TT implements Runnable {
int b= 100 ;

public synchronized void m1() throws Exception {
b = 1000 ;
Thread.sleep(5000) ;
System.out.println("b="+b) ;
}

public synchronized void m2() throws Exception {
// public void m2() throws Exception {
Thread.sleep(2500) ;
b = 2000 ;
}

public void run() {
try {
m1() ;
} catch (Exception e) {
e.printStackTrace() ;
}
}

public static void main(String args[]) throws Exception {
TT tt = new TT() ;
Thread t = new Thread(tt) ;
t.start();

tt.m2();
System.out.println(tt.b) ;
}

}
[/code]

-------[size=medium][color=red]Producer & Consumer [/color][/size]------------------------------------------------------------------------
[code]
package com.testthread2;

public class ProducerConsumer {
public static void main(String args[]) {
SyncStack ss = new SyncStack() ;
Producer p = new Producer(ss) ;
Consumer c = new Consumer(ss) ;
new Thread(p).start() ;
new Thread(c).start() ;
}

}

class WoTou {
int id ;
WoTou(int id) {
this.id = id ;
}
public String toString() {
return "WoTou :" + id ;
}
}

class SyncStack {
int index = 0 ; //装到第几个了
WoTou[] arrWT = new WoTou[6] ;

public synchronized void push(WoTou wt) { //往筐里放馒头
while(index == arrWT.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
} //当前对象 wait:当前的正在访问该对象的线程wait
}
this.notify();
arrWT[index] = wt ;
index ++ ;
}

public synchronized WoTou pop() { //从筐里取出馒头
while(index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify() ;
index -- ;
return arrWT[index] ;
}
}

class Producer implements Runnable {
SyncStack ss = null ;
public Producer(SyncStack ss) {
this.ss =ss ;
}

public void run() {
for(int i=0; i<25; i++) { //生产的馒头
WoTou wt = new WoTou(i) ;
ss.push(wt) ;
System.out.println("生产了:" + wt) ;
// try {
// Thread.sleep(1000) ;
// } catch (InterruptedException e) {
// e.printStackTrace() ;
// }
}
}
}

class Consumer implements Runnable {
SyncStack ss = null ;
public Consumer(SyncStack ss) {
this.ss =ss ;
}

public void run() {
for(int i=0; i<20; i++) { //消费的馒头
WoTou wt = ss.pop();
System.out.println("消费了:" +wt) ;
// try {
// Thread.sleep(1000) ;
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值