一、线程的创建和启动
1.三种创建线程的方法
- 使用继承Thread类的方法创建多线程;
优点:代码编写简单,得到当前线程名只需getName()就可以了;
缺点:不能继承其他父类,并且不能共享资源;
public class demo extends Thread {
private int i;
public void run() {
for (; i < 100; i++) {
//默认this当前线程调用方法,返回当前线程名称
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
//利用currentThread()方法获取当前线程名
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
new demo().start();
new demo().start();
}
}
}
}
- 使用Runnable接口实现类作为target创建多线程;
优点:可以继承其他父类,可以共享资源;
缺点:编写稍复杂,访问当前线程需要使用Thread.currentThread()方法;
public class demo implements Runnable {
private int i;
public void run() {
for (; i < 100; i++) {
//默认this当前线程调用方法,返回当前线程名称
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
//利用currentThread()方法获取当前线程名
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
demo demo = new demo();
new Thread(demo,"线程1").start();
new Thread(demo,"线程2").start();
}
}
}
}
- 使用Callable接口实现类作为target创建多线程;
Callable接口基本与Runnable接口基本类似,
不同点在于Callable可以由返回值,可以声明抛出异常;
public class demo {
public static void main(String[] args)