本文为学习笔记。源自学习微信公众号“我们都是小青蛙”。
本篇文章将记录如何使用java中的线程。
main线程
main方法是程序入口,我们对已经编译好的class文件调用java命令时就可以运行一个java程序。这个过程中,其实系统自动为我们创建了一个进程和一个线程,而且这个线程的名字就叫做main。main线程是用来执行我们的程序的,不过系统还会为我们创建一些辅助线程来帮助main线程的执行。
在java中,使用线程可以被理解为任务。我们需要做的事情,就是
- 定义任务
- 使用任务
定义任务
java中的任务被抽象成了一个Runnable接口:
public interface Runnable {
public void run();
}
我们的自定义任务需要去实现这个接口,并把任务的详细内容写在覆盖的run方法里,比如我们定义一个输出一个字符串的任务:
public class PrintTask implements Runnable {
@Override
public void run() {
System.out.println("输出一行字");
}
}
执行任务
java中的Thread类来代表一个线程,我们需要关注它的这几种构造方法:
在创建线程对象的时候传入需要执行的任务以及这个线程的名称。
Thread(Runnable target)
只传入需要执行的任务,名称是系统自动生成的,或者可以在创建对象后再通过别的方法修改名称。
Thread(String name)
只传入待创建线程的名称。
Thread()
啥都不传,就是单纯构造一个线程对象而已~
下面我们来执行上面的任务。
public class Test {
public static void main(String[] args) {
new Thread(new PrintTask()).start();
}
}
//输出: 输出一行字
Thread类本身就代表了一个Runnable任务,我们看Thread类的定义。
public class Thread implements Runnable {
private Runnable target;
@Override
public void run() {
if (target != null) {
target.run();
}
}
// ... 为省略篇幅,省略其他方法和字段
}
所以,启动任务我们也可以这样写。
public class PrintThread extends Thread {
@Override
public void run() {
System.out.println("输出一行字");
}
}
class Test {
public static void main(String[] args) {
new PrintThread().start();
}
}
线程的一些方法
获取线程ID:
long getId()
获取和设置线程名称
void setName(String name)
String getName()
获取和设置线程优先级
void setPriority(int newPriority)
int getPriority()
休眠
static void sleep(long millis) throws InterruptedException