thread
/**
* 双线程轮流打印
* @author Administrator
*线程1负责打印a,b,c,d
*线程2负责打印1,2,3,4
*/
public class thread {
static final Object object = new Object();
public static void main(String[] args) {
new Thread(new Runnable() {
String[] a = {"a","b","c","d"};
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<4;i++)
{
synchronized(object){
System.out.println("线程A开始执行");
object.notify();
try {
System.out.println("线程a开始等待");
object.wait();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
System.out.println("线程a继续执行");
System.out.println(a[i]);
System.out.println("线程A执行结束!");
object.notify();
}
}
}
}).start();
new Thread(new Runnable() {
int[] a = {1,2,3,4};
public void run() {
// TODO Auto-generated method stub
for(int i =0;i<a.length;i++){
synchronized(object){
System.out.println("线程1开始执行!");
object.notify();
try {
System.out.println("线程1开始等待");
object.wait();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
System.out.println("线程1继续执行!");
System.out.println(a[i]);
System.out.println("线程1执行结束!");
}
}
}
}).start();
}
}
ReentrantLock
/**
* 1.开启两个线程,一个线程打印A~Z,两一个线程打印1~52的数据。
2.实现交替打印,输出结果为12A34B...........5152Z.
3.请用多线程方式实现。
* @author Administrator
*
*/
public class thread2 {
static class DataPrint{
public boolean letterFlag = true;
public boolean numFlag = true;
int num = 1;
int letter = 65;
boolean waitFlag = true;
Lock lock = new ReentrantLock();
Condition conLetrter = lock.newCondition();
Condition conNum = lock.newCondition();
public void printLetter(){
if(letter>90){
letterFlag = false;
return;
}
lock.lock();
try {
if(waitFlag){
conLetrter.await();
}
System.out.println((char)letter);
letter++;
Thread.sleep(1000);
waitFlag = true;
conNum.signal();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
lock.unlock();
}
}
public void printerNum(){
if(num >52){
numFlag = false;
return;
}
lock.lock();
try {
if(!waitFlag)
conNum.await();
System.out.println(num);
num++;
System.out.println(num);
num++;
Thread.sleep(1000);
waitFlag =false;
conLetrter.signal();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
lock.unlock();
}
}
}
public static void main(String[] args) {
final DataPrint dataPrint = new DataPrint();
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
while(dataPrint.letterFlag)
dataPrint.printLetter();
}
}).start();
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
while(dataPrint.numFlag)
dataPrint.printerNum();
}
}).start();
}
}