-------[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]
[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]