同步代码块实现:
public class Test2 {
public static void main(String[] args) {
Letter letter=new Letter();
letter.letter='a';
printLower p1= new printLower();
printUpper p2 =new printUpper();
p1.setLetter(letter);
p2.setLetter(letter);
p1.start();
p2.start();
}
}
class printLower extends Thread {
Letter letter;
public void setLetter(JAVA.ThreadAPI.src.java.Letter letter) {
this.letter = letter;
}
@Override
public void run() {
while (true) {
synchronized (letter) {
for (int i=1;i<=3;i++){
System.out.println(Thread.currentThread().getName() + "->" + letter.letter);
letter.letter++;
if (letter.letter > 'z') {
letter.letter = 'a';
}
letter.notify();
}
try {
letter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class printUpper extends Thread{
Letter letter;
public void setLetter(JAVA.ThreadAPI.src.java.Letter letter) {
this.letter = letter;
}
@Override
public void run() {
while (true) {
synchronized (letter){
for (int i=1;i<=3;i++){
System.out.println(Thread.currentThread().getName() + "->" + (char)(letter.letter-32));
letter.letter++;
if (letter.letter > 'z') {
letter.letter = 'a';
}
letter.notify();
}
try {
letter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Letter{
char letter;
}
同步方法实现:
public class Test2 {
public static void main(String[] args) {
Letter letter=new Letter();
letter.letter='a';
printLower p1= new printLower();
printUpper p2 =new printUpper();
p1.setLetter(letter);
p2.setLetter(letter);
p1.start();
p2.start();
}
}
class printLower extends Thread {
Letter letter;
public void setLetter(JAVA.ThreadAPI.src.java.Letter letter) {
this.letter = letter;
}
@Override
public void run() {
while (true) {
synchronized (letter) {
for (int i=1;i<=3;i++){
System.out.println(Thread.currentThread().getName() + "->" + letter.letter);
letter.letter++;
if (letter.letter > 'z') {
letter.letter = 'a';
}
letter.notify();
}
try {
letter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class printUpper extends Thread{
Letter letter;
public void setLetter(JAVA.ThreadAPI.src.java.Letter letter) {
this.letter = letter;
}
@Override
public void run() {
while (true) {
synchronized (letter){
for (int i=1;i<=3;i++){
System.out.println(Thread.currentThread().getName() + "->" + (char)(letter.letter-32));
letter.letter++;
if (letter.letter > 'z') {
letter.letter = 'a';
}
letter.notify();
}
try {
letter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Letter{
char letter;
}