一、对于线程的理解
今天学习了java多线程的相关知识,特地写篇博客纪念一下。提到线程就需要提到进程,大家都知道进程其实就是一个应用程序,每一个进程都是由多个线程组成,而线程则是进程中的执行路径。所谓的多线程就是开启了多个执行路径并行执行,cup会随机进行切换分配,对多个线程并行执行。因为cup的运算效率是十分高的,所以大家对多线程执行看到的就好像在交叉执行一样。
二、多线程的应用场景
可能绝大多数的公司都不会使用多线程,因为开启多线程是十分消耗资源的。如果不是处理非常大的数据,那么一般公司都是不会使用多线程的。其实在生活中也有许多多线程的案例,比如迅雷下载,短信的分批发送等待。只有在数据量非常大,而且不需要及时响应客户端的情况下才会使用多线程开发,因为就算使用的多线程,有时候数据量大的话也会处理很长的时间。一般企业都是使用mq之类的进行消息推送,在线程执行完后将消息推送给你,例如莫QQ的一些送礼品活动。
三、java多线程的创建方式
1.使用继承 Thread 类来实现多线程
class ThreadDemo02 extends Thread{
//继承Thread 类来实现多线程
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("run() getId() "+getId()+"---"+i);
}
}
}
public class ThreadDemo01 {
public static void main(String[] args) {
System.out.println("创建主线程");
ThreadDemo02 thread = new ThreadDemo02();
thread.start();
System.out.println("创建子线程");
for (int i = 0; i < 100; i++) {
System.out.println("main() i-- " +i);
}
}
}
执行的结果:可以看到 main 主线程 和 子线程是交叉进行的
run() getId() 10---90
main() i-- 85
main() i-- 86
main() i-- 87
main() i-- 88
main() i-- 89
run() getId() 10---91
main() i-- 90
2.使用实现Runnable接口来实现多线程
class createRunnable implements Runnable {
// 实现Runnable接口来实现多线程
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}
public class ThreadDemo03{
public static void main(String[] args) {
Thread thread = new Thread(new createRunnable());
thread.start();
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}
执行结果:
Thread-0---61
main---93
Thread-0---62
Thread-0---63
main---94
main---95
Thread-0---64
main---96
main---97
main---98
main---99
3.使用匿名内部类的方式实现多线程
public class ThreadDemo04 {
public static void main(String[] args) {
//使用匿名内部类的方式实现多线程
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}).start();
//main
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}
执行结果:
Thread-0---69
main---96
Thread-0---70
main---97
Thread-0---71
main---98
四、java线程的生命周期
线程的生命周期有五步,分别是创建、就绪、运行、阻塞、死亡。那么这些状态分别是在什么情况下出现的呢?创建状态一听就是在new一个线程的时候出现的;就绪状态在.start()和 run()之间,也就是启动了线程,但是cpu还未分配执行;阻塞状态有很多种,最常见的是Thread.sleep对线程进行睡眠,线程并没有死亡;死亡状态,在线程执行完或者线程异常而没有处理都会死亡。提到线程异常,在run里线程的异常只能try而不能抛再mai()方法中线程是可以捕获也可以抛出的。
现在很多人都是做javaEE项目的,在javase里多线程是在main中运行,而在web中都是走的http,而多线程则是在控制器中运行的,也就是spring mvc中的controller中。是不是许多人现在还没用过多线程,没关系试试吧!
本人第一次写博客如果写的不好或者有错误,请多多指教
转载请标明出处 http://blog.csdn.net/lanlandemaomi/article/details/77414138