java线程之创建线程类

1.extends Thread方法

 class Person extends Thread {
int sum1 = 50; // 含参构造器
public Person(String name) {
super(name);
} // 重写run()方法
@Override
public void run() {
for (int i = 0; i < 50; i++) {
eat();
}
} // 线程具体任务
public void eat() {
if (sum1 > 0) {
System.out.println(getName() + "吃了一个苹果," + "还剩" + --sum1 + "个苹果");
try {
Thread.sleep(100); //休眠100ms
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} public class Eatapple {
//创建线程对象,并开启
public static void main(String[] args) {
Person x = new Person("x");
x.start();
}
}

控制台输出(截取部分)

 x吃了一个苹果,还剩49个苹果
x吃了一个苹果,还剩48个苹果
x吃了一个苹果,还剩47个苹果
x吃了一个苹果,还剩46个苹果
x吃了一个苹果,还剩45个苹果
x吃了一个苹果,还剩44个苹果
x吃了一个苹果,还剩43个苹果
x吃了一个苹果,还剩42个苹果
x吃了一个苹果,还剩41个苹果
x吃了一个苹果,还剩40个苹果
x吃了一个苹果,还剩39个苹果
x吃了一个苹果,还剩38个苹果

上面红字标出的getName(),实际上等价于this.getName(),返回当前线程的名称,在这里就是“x”。

Thread.sleep(100);线程休眠100ms,所以控制台会逐条打印语句。

2.implements Runnable 方法

 class Apple implements Runnable {
int sum1 = 50; // 重写run()方法
@Override
public void run() {
for (int i = 0; i < 50; i++) {
eat();
}
} // 线程具体任务
public void eat() {
if (sum1 > 0) {
System.out.println(Thread.currentThread().getName() + "吃了一个苹果," + "还剩" + --sum1 + "个苹果");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} public class Eatapple {
public static void main(String[] args) {
//创建线程对象并开启
Apple a = new Apple();
new Thread(a, "AA").start();
}
}

注意这里获取线程名称“AA”的方法。

解析:extends Thread方法看上去清晰明了,新建一个子类继承线程类,实例化子类对象(线程对象),start()

方法开启线程。

implements Runnable方法,实现了一个Runnable接口,然后用Thread(Runnable class,String name)构造

方法新建线程,start()方法开启。

在多线程操作中,由于第一种方法创建的线程不能够完全实现资源以及信息的的共享,所以我们建议使用第二种方法。

上一篇:解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误


下一篇:Java中的形参和实参的区别以及传值调用和传引用调用