1.创建线程
A.继承Thread父类
重写run方法,在run方法中实现线程的任务
启动线程,调用start方法
B.实现接口Runnable
实现run方法
//创建一个实现Runnable接口的类的对象
TestThreadDemo1 t1 = new TestThreadDemo1();
//创建一个线程类的对象
Thread tt = new Thread(t1);
tt.start();
2.线程的状态以及相互转换(线程的生命周期)
新建,就绪,运行,挂起,结束
3.同步
在一定时间内程序块只能由一个线程运行
异步:在同一时间内可以有多个线程同时运行同一段程序
synchronized 关键字来定义同步
A方法来实现线程任务:
优点是使用十分简单,但是需要继承,由于java是单继承的
所以一般只在简单的小程序中才会使用继承方法
/**
* 继承Thread的类覆盖run方法
* 主线程new 该类,调用start()方法来开始该方法
* CUP要调用哪个线程是说不准的
* */
public class ExtendThread {
public static void main(String[] args) {
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
/*
* 打印例子:
* Thread-0走
* Thread-1走
* Thread-3走
* Thread-4走
* Thread-2走
* Thread-5走
*/
}
}
public class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"走");
super.run();
}
}
B方法来实现线程任务:
优点是可以同时implement其他类,不像方法A,只能继承该类就不能再继承了
缺点就是写起来麻烦了一点点
但是一般都是使用这个方法的
/**
* 创建一个实现Runnable接口的类的对象,覆盖run()
* 创建一个线程类的对象,调用start方法起点线程
* CUP要调用哪个线程是说不准的
*/
public class ExtendThread {
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread_1 = new Thread(myThread);
thread_1.start();
Thread thread_2 = new Thread(myThread);
thread_2.start();
Thread thread_3 = new Thread(myThread);
thread_3.start();
Thread thread_4 = new Thread(myThread);
thread_4.start();
Thread thread_5 = new Thread(myThread);
thread_5.start();
/*
* 打印例子:
* Thread-1走
* Thread-4走
* Thread-3走
* Thread-2走
* Thread-0走
*/
}
}
public class MyThread implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"走");
}
}