专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java多线程入门快速学习

Java多线程入门快速学习

更新时间:2020-07-09 14:56:35 来源:动力节点 浏览1484次

多线程技术在java开发中使用的场景还是很多的,而我们使用多线程的目的就是为了提高程序的运行效率。下面我们来简单介绍一下多线程。

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多线程入门快速学习”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>