一、进程与线程
进程:
是内存中运行的应用程序,有独立的空间,系统运行程序的基本的单位,可以有多个进程
例如:打开微信、支付宝
线程:
是进程中的执行单元,可以有多个线程
例如:打开电脑管家中的各项功能
二、创建线程类
1、使用Thread关键字
Java.long.Thread
使用步骤:
创建子类来继承 Thread ,覆盖重写 run 方法,创建子类对象并调用 start 方法
//创建Thread子类
public class Tread00 extends Thread {
//覆盖重写run方法
@Override
public void run(){
for (int i = 0; i <10 ; i++) {
System.out.println("run:"+i);
}
}
public static void main(String[] args) {
//创建Thread的子类对象,调用start方法
Tread00 th = new Tread00();
th.start();
//这里是一个主方法的线程
//也会被执行
for (int i = 0; i <10 ; i++) {
System.out.println("main;"+i);
}
}
2、接口Runnable
java.long.Runnable;
使用步骤:
创建子类实现接口 Runnable,覆盖重写 run 方法,创建接口实现类对象,创建Tread的对象并传递实现类对象,调用start方法。
//创建的线程实现一个Runnable类
public class TreadGreat implements Runnable{
//重写run方法
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+";"+i);
}
}
public static void main(String[] args) {
//创建接口实现类对象
TreadGreat treadGreat = new TreadGreat();
//创建Tread类对象,传递实现类对象
Thread th = new Thread(treadGreat);
th.start();
//主线程
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ";" + i);
}
}
三、Thread的常用方法
String getName()
static Thread currentThread()
public static void sleep(long millis)
public class getTreadName extends Thread {
@Override
public void run(){
// String name = getName();
// System.out.println(name);
/*
Thread name2 =Thread.currentThread();
System.out.println(name2);//Thread[Thread-0,5,main]
String str = name2.getName();
System.out.println(str);
*/
//还可以使用
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
getTreadName name1 = new getTreadName();
name1.start();//Thread-0
new getTreadName().start();//Thread-1
new getTreadName().start();//Thread-2
/*
使用currentTread打印结果
Thread[Thread-2,5,main]
Thread[Thread-1,5,main]
Thread[Thread-0,5,main]
*/
System.out.println(Thread.currentThread().getName());
}
public class TreadSleep {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
try {
//线程延时
Thread.sleep(500);//单位是毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);//瞬间就能打印出结果
}
}
//InterruptedException:中断故障异常,一般发生在线程中
四、线程的匿名对象
格式:
new 父类/接口(){
重复父类/接口中的方法
};
public static void main(String[] args) {
//使用Thread匿名
//new一个父类(Thread)
new Thread(){
//重写run方法
@Override
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+">>>>"+i);
}
}
}.start();
//使用Runnable匿名
Runnable ru = new Runnable(){
@Override
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+">>>>"+"手机");
}
}
};
new Thread(ru).start();
//使用Runnable匿名
new Thread(new Runnable(){
@Override
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+">>>>"+"电脑");
}
}
}).start();//注意Thread的括号
}