线程:进程内部的一个独立执行单元,一个进程可以同时并发的运行多个线程
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间
在java运行中,一个main主方法就是一个线程
若要开启第二个线程就要使用Thread类
使用java程序可以同时并发的运行两段不相同的代码
Thread类构造方法:
public Thread() 创建一个线程对象
Thread t = new Thread(); //创建一个线程对象
t1.start
public Thread(String name) 创建一个线程对象并给线程命名
Thread t = new Thread("A线程");
t.start();
public Thread(Runnable target) 创建一个线程对象分配指定目标
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("使用Runnable接口创建的线程");
}
});
public Thread(Runnable target,String name) 创建一个线程对象分配指定目标,并命名
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("使用Runnable接口创建的线程");
}
},"A线程");
Thread常用方法:
public String getName() 获取线程对象的名称
Thread t = new Thread("c线程");
System.out.println(t.getName()); //输出:c线程
public void setName(String name) 设置线程对象的名称
Thread t = new Thread();
t.setName("B线程");
System.out.println(t.getName()); //输出:B线程
public void start() 开启线程,在新的线程路径中执行run方法内容
Thrad t = new Thread();
t.start();
public static void sleep(long millis) 让当前线程休眠指定时间,单位是毫秒
Thread.sleep(20); //让线程休眠20ms
线程休眠需要处理异常
public static Thread currentThread() 获得当前执行线程的对象,返回一个线程对象
Thread t = Thread.currentThread();
创建线程方式一:
继承Thread类
1.创建一个自定义类继承Thread类
public class MyThread extends Thread {}
2.重写run方法,将线程的任务写在run()方法中
@Override
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
3.在主方法中创建自定义类对象,并开启线程即可
MyThread mt = new MyThread();
mt.run();
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
这样就等于是main方法和MyThread两个线程在同时运行任务
由此,线程就创建完成了
创建线程方式二:
实现Runnable类
1.创建Runnable接口的实现类
public class MyRunnable implements Runnable {}
2.重写Runnable的run()方法,将线程的任务写在run()方法体中
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
3.在主方法中创建实现类对象,根据对象创建Thread对象,并开启线程
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
由此使用实现Runnable接口的线程就创建完成了
两种创建线程的方式相比:
1.实现Runnable接口的方法解决了java类单继承性的局限性
(若自定义的线程类本身就有继承关系,就无法继承Thread来创建对象,可是使用Runnable实现类就不会影响继承关系)
2.可以更好的在多个线程之间共享数据
(实现Runnable对象,创建的线程对象都是使用同一个target参数,线程同步中会细说)
3.将线程和任务进行了分离,降低了程序的耦合性
(创建多个线程时,继承Thread的方法需要创建多个不同对象,执行相同代码)
(使用Runnable实现类创建对象,只要把方法写在实现类的方法中,再使用实现类对象创建Thread,就能多个线程执行相同代码)
4.为线程池提供前提条件
创建线程方式三:
匿名内部类创建Runnable线程对象
匿名内部类创建线程,仅适合创建一个线程时,实用性不高
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
});
t.start();