运行周期
创建、就绪、运行、阻塞、终止
创建
基本创建
……main(){
//new个线程名为A
Thread T1 = new MyThread("A");
//启动线程
T1.start();
}
class myThread extends Thread{
public void run() {
//运行内容
}
继承Thread类
public class Main {
public static void main(String[] args) {
MyThread T1 = new MyThread("A");
MyThread T2 = new MyThread("B");
T1.start();
T2.start();
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name+":"+i);
try {
sleep(1000); //休眠1秒,避免太快导致看不到同时执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
接口Runnable类
public class Main {
public static void main(String[] args) {
//测试Runnable
MyThread1 t1 = new MyThread1();
new Thread(t1).start();//同一个t1,如果在Thread中就不行,会报错
new Thread(t1).start();
new Thread(t1).start();
}
}
class MyThread1 implements Runnable{
private int ticket = 10;
@Override
//记得要资源公共,要在run方法之前加上synchronized关键字,要不然会出现抢资源的情况
public synchronized void run() {
for (int i = 0; i <10; i++) {
if (this.ticket>0) {
System.out.println("卖票:ticket"+this.ticket--);
}
}
}
}
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
所以,重点就是Thread简单Runnable最强
功能
-
Thread.sleep()
- 睡眠 stop()、desyory()
- 死亡