用Java创建线程
这是使用Java创建线程的两种方法:
- 通过继承Thread类。
- 通过实现Runnable接口。
在开始创建线程的程序(代码)之前,让我们看一下Thread类的这些方法。 在下面的示例中,我们很少使用这些方法。
- getName():用于获取线程的名称
- getPriority():获取线程的优先级
- isAlive():确定线程是否仍在运行
- join():等待线程终止
- run():线程的入口点
- sleep():将线程暂停一段时间
- start():通过调用其run()方法启动线程
方法1:通过继承Thread类创建线程
class Count extends Thread {
Count() {
super("my extending thread");
System.out.println("我的线程建立了:" + this);
start();
}
public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("打印统计 " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("我的线程中断了");
}
System.out.println("我的线程完成了");
}
}
class ExtendingExample {
public static void main(String args[]) {
Count cnt = new Count();
try {
while (cnt.isAlive()) {
System.out.println("主线程将保持活动状态,直到子线程处于活动状态");
Thread.sleep(1500);
}
} catch (InterruptedException e) {
System.out.println("主线程中断");
}
System.out.println("主线程的运行结束");
}
}
输出如下:
我的线程建立了:Thread[my extending thread,5,main]
主线程将保持活动状态,直到子线程处于活动状态
打印统计 0
打印统计 1
主线程将保持活动状态,直到子线程处于活动状态
打印统计 2
主线程将保持活动状态,直到子线程处于活动状态
打印统计 3
打印统计 4
主线程将保持活动状态,直到子线程处于活动状态
打印统计 5
主线程将保持活动状态,直到子线程处于活动状态
打印统计 6
打印统计 7
主线程将保持活动状态,直到子线程处于活动状态
打印统计 8
主线程将保持活动状态,直到子线程处于活动状态
打印统计 9
我的线程完成了
主线程的运行结束
提示:多运行几次,每次输出的结果不一定相同,CPU内部在这循环十次中切换线程的点有可能是不同的。
方法2:通过实现Runnable接口创建线程
class MultithreadingDemo implements Runnable{
public void run(){
System.out.println("My thread is in running state.");
}
public static void main(String args[]){
MultithreadingDemo obj=new MultithreadingDemo();
Thread tobj = new Thread(obj);
tobj.start();
}
}
下面来看一个复杂点的例子,观察该程序的输出,并尝试了解该程序中正在发生的事情。 如果您了解每种线程方法的用法,那么理解此示例就不会遇到任何问题。
class Count implements Runnable
{
Thread mythread ;
Count()
{
mythread = new Thread(this, "my runnable thread");
System.out.println("我的线程建立" + mythread);
mythread.start();
}
public void run()
{
try
{
for (int i=0 ;i<10;i++)
{
System.out.println("打印统计: " + i);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
System.out.println("我的线程中断");
}
System.out.println("我的线程运行完成" );
}
}
class RunnableExample
{
public static void main(String args[])
{
Count cnt = new Count();
try
{
while(cnt.mythread.isAlive())
{
System.out.println("主线程将保持活动状态,直到子线程处于活动状态");
Thread.sleep(1500);
}
}
catch(InterruptedException e)
{
System.out.println("主线程中断");
}
System.out.println("主线程完成" );
}
}
输出:
我的线程建立Thread[my runnable thread,5,main]
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 0
打印统计: 1
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 2
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 3
打印统计: 4
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 5
打印统计: 6
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 7
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 8
主线程将保持活动状态,直到子线程处于活动状态
打印统计: 9
我的线程运行完成
主线程完成
提示:多运行几次,每次输出的结果不一定相同,CPU内部在这循环十次中切换线程的点有可能是不同的。