更新时间:2020-07-09 14:56:35 来源:极悦 浏览1625次
多线程技术在java开发中使用的场景还是很多的,而我们使用多线程的目的就是为了提高程序的运行效率。下面我们来简单介绍一下多线程。
1.在系统中,CPU通过给每个线程分配CPU时间片来实现这个机制,时间片是CPU分配给各个线程的时间,时间片非常短,所以CPU通过不停切换线程执行,感觉是多线程同时执行,时间片一般是几十毫秒。
Thread类中start方法用来启动线程,实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片(执行权),就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。(一般面试容易问到)。
2.多线程一定快吗
下面我们举个栗子来看看多线程的累计操作时间
public class ThreadTest {
private static final long count = 10000L;
public static void main(String[] args) throws InterruptedException {
concurrency();
serial();
}
private static void concurrency() throws InterruptedException {
long start = System.currentTimeMillis();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int a = 0;
for(long i = 0; i
从图表中可以看出当并行累计不超过1亿的时候串行的速度要快,主要因为并发执行线程有创建和上下文切换的开销。
3.如何减少上下文切换
减少上下文切换的方法有无锁并发,CAS,使用最少线程和使用协程
方法一:无锁并发编程。多线程竞争时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash取模分段,不同的线程处理不同段的数据
方法二:CAS算法。Java的Atomic包使用CAS算法来更新数据,而不需要加锁
方法三:使用最少线程。避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态
方法四:协程。在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
4.多线程使用场景
数据库连接池,短信邮件发放,消息通知等
5.多线程创建方式
第一种继承Thread类重写run方法
class CreateThread extends Thread {
// run方法中编写 多线程需要执行的代码
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("i:" + i);
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("-----多线程创建开始-----");
// 1.创建一个线程
CreateThread createThread = new CreateThread();
// 2.开始执行线程 注意 开启线程不是调用run方法,而是start方法
System.out.println("-----多线程创建启动-----");
createThread.start();
System.out.println("-----多线程创建结束-----");
}
}
第二种实现Runnable接口,重写run方法
class CreateRunnable implements Runnable {
@Override
public void run() {
for (inti = 0; i< 10; i++) {
System.out.println("i:" + i);
}
}
}
第三种使用匿名内部类方式
Thread thread = new Thread(new Runnable() {
public void run() {
for (int i = 0; i< 10; i++) {
System.out.println("i:" + i);
}
}
});
thread.start();
以上就是极悦java培训机构的小编针对“Java多线程入门快速学习”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习