java多线程之快速入门

一、对于线程的理解

今天学习了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值