本文共 1025 字,大约阅读时间需要 3 分钟。
我们通常在电脑中打开的应用称作进程,一个应用就是一个进程,而一个进程里边一般包含多个线程。
系统要为每一个进程分配独立的内存空间,而进程里的多个线程共用这些内存。
我们通常所写的main方法就是一个线程,独立的线程都是顺序执行的,但是多个线程同时存在的时候,却不一定是顺序执行,因为多线程在执行的时候会抢夺系统分配出来的时间片段,具有不确定性。
创建线程有两种方式,一种是继承Thread,另一种是实现Runnable接口,例如下边的例子:
package demo1;
/**
* 多线程练习1
* @authortuzongxun
*
*/
public class ThreadTest3 {
publicstaticvoidmain(String[] args) {
Thread111 thread111 = newThread111();
Thread222 thread222 = newThread222();
thread111.start();
new Thread(thread222, "thread222").start();
}
}
classThread111extends Thread {
@Override
public void run() {
for (int i = 0; i <1000; i++) {
System.out.println(this.getName() + ":线程1");
}
}
}
classThread222implements Runnable {
@Override
public void run() {
for (int i = 0; i <1000; i++) {
System.out.println(Thread.currentThread().getName() + ":线程2");
}
}
}
如上代码,创建线程的时候,不论是继承Thread还是实现runnable接口,一般都要重写run方法。
线程启动是调用线程的start方法,线程还有sleep、join、wait等阻塞方法。
线程一般有创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、死亡(dead)五种状态,也称作线程的生命周期。
一般,阻塞状态的线程不能直接变成运行状态,而是会先就绪,然后才会在适当的时机运行。start方法之后,线程就会处于就绪状态。
转载地址:http://hiuwo.baihongyu.com/