java线程基础知识总结什么是线程线程的简单使用线程中断线程状态线程属性线程同步ReentrantLock类条件锁注意synchronized关键字同步阻塞volatile关键字线程局部变量stop 和suspend方法被弃用原因阻塞队列Callable、Future和FutureTask执行器ThreadPoolExecutor
什么是线程
一个程序同时执行多个任务,通常每个任务称为一个线程。
进程和线程区别
进程拥有自己的一整套变量体系,而线程则是共享。线程是轻量的,创建撤销的开销小。
线程的简单使用
方式一:
//自定义Runnable
class MyRunnable implements Runnable{
@Override
public void run () {
//需要处理的任务
}
}
//创建Runnable对象
Runnable r = new MyRunnable();
//创建Thread对象
Thread t = new Thread(r);
//启动线程
t.start();
方式二
//复写Thread类的run方法
Thread thread= new Thread(){
@Override
public void run () {
//需要做的任务
}
};
thread.start();
推荐方式一,因为方式二每一个任务启动一个线程不好,开销大,多任务并行处理可以通过线程池来实现。
注意直接调用thread和Runnable 的run方法没有用,不会启动新线程。
Thead类中start()方法和run()方法的区别
1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。
2,run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。
3,把需要处理的代码放到run()方法中,start()方法启动线程将自动调用run()方法,这个由java的内存机制规定的。并且run()方法必需是public访问权限,返回值类型为void。
4,当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行