万一你要做的不是一个简单的重复作业javalangThread类就派上了用场它允许你自己控制基本功能通过创建Thread的一个子类你可以使你的系统脱离并进行一个长时间运行的作业如从网络上读取一个文件而不阻碍你的其它程序的运行这种长时间运行的作业将在run方法中定义
第二种方式是创建Thread类的子类并在子类中实现run方法或在实现runnable的类中实现run方法并将这个实现传递给Thread的构造函数
你可能会问有什么区别Java编程语言仅支持单一继承如果你设计的调用是除了Thread以外的其它类你可以是你的类实现Runnable而它可以是你的作业被执行否则你定义Thread的子类来运行你的Run方法在处理过程中不再添加其它操作
对于创建Thread子类的第三种情况下面的程序生成了一个新的线程来计算一个特定URL的字符数这个URL是通过命令行传递进来的在这进行过程之中实现Runnable的第四种情况被演示打印出重复的消息
注意在实现Runnable的这后一种情况下你必须提供重复消息的代码你必须同时sleep以分配时间并完成操作在两种情况下与使用Timer相比较这段程序的最后一部分包含有你从命令行读取命令以触发程序结束注意在系统读取URL并打印消息的同时你总可以按Enter键结束程序
import javaio*;
import javanet*;
public class Both
{
public static void
main(String args[])
}
final String urlString = args[];
final String message = args[];
Thread thread = new Thread()
{
public void run()
{
try
{
URL url = new URL(urlString);
URLConnection connection =urlopenConnection();
InputStreamReader isr = newInputStreamReaderconnectiongetInputStream());
BufferedReader reader =new BufferedReader(isr);
int count = ;
while (readerread() != )
{
count++;
}
Systemoutprintln(Size is : + count);
readerclose();
}
catch (MalformedURLException e)
{Systemerrprintln(Bad URL: + urlString);}
catch (IOException e)
{Systemerrprintln(I/O Problems);}
}
threadstart();
Runnable runnable = new Runnable()
{
public void run()
{
while(true)
{
Systemoutprintln(message);
try
{
Threadsleep();
} catch (InterruptedException e) {}
}
}
}
};
Thread thread = new Thread(runnable);
threadstart();
try {
Systemoutprintln
(Press ENTER to stop);
Systeminread(new byte[]);
}
catch (IOException e){Systemoutprintln(I/O problems);}
Systemexit();
因为有多种方式来处理线程你选用哪种技术取决于你和你面临的条件要成为一个有效的Java编程人员尽管你通常不必学习Java编程语言的所有内容和核心库但是线程是一个例外你越早了解线程如何工作和如何使用线程你将越早了解Java程序如何工作和交互
[] []