写2个线程,其中一个打印1-52,另一个打印A-Z,打印顺序是12A34B56C….5152Z。这里使用线程通信的方式控制上面的打印顺序。
Printer类:
该类提供两个同步方法printChar()和printNumber(),分别打印字符和数字。通过两个打印线程之间的通信控制:每打印两个数字后,打印一个字符,如此循环。代码如下:
public class Printer
{
private int printCount = 0;
public synchronized void printNumber()
{
try
{
for (int i = 1 ; i <= 52 ; i++ , printCount++)
{
if (printCount > 1)
{
i--;
wait();
}
else
{
Log.d("Thread", i + "");
if (printCount == 1)
{
notifyAll();
}
}
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public synchronized void printChar()
{
try
{
for (char c = 'A' ; c <= 'Z' ; c++)
{
if (printCount <= 1)
{
c--;
wait();
}
else
{
Log.d("Thread" , c + "");
printCount = -1;
notifyAll();
}
}
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
}
两个打印线程:
public class NumberThread extends Thread
{
private Printer printer;
public NumberThread(Printer printer)
{
this.printer = printer;
}
@Override
public void run()
{
printer.printNumber();
}
}
public class CharThread extends Thread
{
private Printer printer;
public CharThread(Printer printer)
{
this.printer = printer;
}
@Override
public void run()
{
printer.printChar();
}
}
MainActivity类:
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_activity);
Printer printer = new Printer();
new NumberThread(printer).start();
new CharThread(printer).start();
}
}
完毕,很简单的例子。