1、线程概述
进程:计算机中特定功能的程序在数据集上的一次运行
线程:是进程的一个单元
多线程:一个进程中有多个线程在同时运行
JVM是多线程的,在我们运行JVM的时候后台会运行垃圾回收的线程,来清理没有被引用的对象
2、线程的实现方法(Thread)
1)将声明类Thread的子类,该子类应重写Thread类的run方法
package com.cn.tx;
public class CountThread extends Thread {
private String tName;
public CountThread() {
}
public CountThread(String tName) {
//将super带有参数的方法调用
super(tName);
}
/**
* 线程的执行体
*/
@Override
public void run() {
for(int i= 0;i<20;i++){
System.out.println(this.getName()+i+" 你好java");
}
}
}
package com.cn.tx;
public class ThreadDemo {
public static void main(String[] args) {
//创建线程的实例对象
//CountThread ct = new CountThread();
//CountThread ct1 = new CountThread();
//创建线程的名字
//ct.setName("xiancheng1");
//ct1.setName("xiancheng2");
CountThread ct = new CountThread("xiancheng1");
CountThread ct1 = new CountThread("xiancheng2");
//启动线程,两个线程同时执行,当函数运行到11行时,有三个线程同时运行,因为主函数main也是一个线程
ct.start();
ct1.start();
}
}
2)声明实现Runable接口的类,该类然后实现run方法,然后可以分配该类的实例,在创建Thread时作为一个参数来传递并启用
package com.cn.tx;
public class ThreadDemo1 {
public static void main(String[] args) {
//创建两个线程
CountThread1 ct = new CountThread1();
Thread t1 = new Thread(ct);
//Thread t1 = new Thread(ct,"线程1");
CountThread1 ct1 = new CountThread1();
Thread t2 = new Thread(ct1);
//启动线程
t1.start();
t2.start();
}
}
package com.cn.tx;
public class CountThread1 implements Runnable {
@Override
public void run() {
for(int i= 0;i<20;i++){
//输出线程的名字
System.out.println(Thread.currentThread().getName()+" 你好java"+i);
}
}
}
3、eclipse中重写方法直接用快捷键:ALT+SHIFT+R