Callable
- Callable和Runnable一样,但是Callable可以有返回值,可以捕获异常。
- 方法不同,run()。
public class ThreadByExtends extends Thread {
private int i;
@Override
public void run() {
//当线程类继承Thread类时,直接使用this即可获取当前线程句柄。
// 因此可以直接调用getName()方法返回当前线程的名称。
System.out.println("当前线程名称是:" + getName());
for (; i < 5; i++) {
System.out.println(getName() + ":" + i);
try {//保证让别的线程也有执行的机会
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args) {
//静态方法没有this,只能通过Thread.currentThread获取当前线程句柄
System.out.println(Thread.currentThread().getName());
//创建、并启动第一条线程
new ThreadByExtends().start();
//创建、并启动第二条线程
new ThreadByExtends().start();
}
}
继承Thread类创建线程类
public class ThreadByExtends extends Thread {
private int i;
@Override
public void run() {
//当线程类继承Thread类时,直接使用this即可获取当前线程句柄。
// 因此可以直接调用getName()方法返回当前线程的名称。
System.out.println("当前线程名称是:" +getName());for (; i < 5; i++) {
System.out.println(getName()+ ":" +i);try{//保证让别的线程也有执行的机会
Thread.sleep(10);
}catch(InterruptedException e) {
}
}
}
public static void main(String[] args) {
//静态方法没有this,只能通过Thread.currentThread获取当前线程句柄
System.out.println(Thread.currentThread().getName());
//创建、并启动第一条线程
new ThreadByExtends().start();
//创建、并启动第二条线程
new ThreadByExtends().start();
}
}
实现Runnable接口创建线程类
通过实现Runnable接口来创建线程类
* 1.Runnable非常适合多个相同线程来处理同一份资源的情况
* 2.Runnable可以避免由于Java的单继承机制带来的局限
* 3.如果想获取当前线程句柄,只能用Thread.currentThread()方法*/
public class ThreadByRunnable implements Runnable {
private int i;
@Override
public void run() {
System.out.println("当前线程名称是:" + Thread.currentThread().getName());
for (; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
try {
//因为sleep是静态方法,所以不需要通过Thread.currentThread()方法获取当前线程句柄
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args) {
ThreadByRunnable st = new ThreadByRunnable();
new Thread(st, "新线程1").start();
new Thread(st, "新线程2").start();
}
}