Java多线程详解

Posted wyb666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程详解相关的知识,希望对你有一定的参考价值。

内容:

1、什么是多线程

2、两种创建线程方式

3、线程的匿名内部类使用

4、线程安全

5、线程同步

6、Lock接口

 

 

 

1、什么是多线程

学习多线程之前,我们先要了解几个关于多线程有关的概念。

进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,

进程是处于运行过程中的程序,并且每个进程都具有一定独立功能

线程:线程是进程中的一个执行单元,来完成进程中的某个功能

 

进程实例:

技术图片

 

线程实例:

 技术图片

一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序可以称之为多线程程序

简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

 

什么是多线程呢?即就是一个程序中有多个线程在同时执行。

通过下图来区别单线程程序与多线程程序的不同:

单线程程序:

  • 若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。
  • 去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。

多线程程序:

  • 若有多个任务可以同时执行。
  • 去网吧上网,网吧能够让多个人同时上网。

 

主线程(单线程程序):

回想我们以前学习中写过的代码,当我们在dos命令行中输入java空格类名回车后,启动JVM,并且加载对应的

class文件。虚拟机并会从main方法开始执行我们的程序代码,一直把main方法的代码执行结束。如果在执行过程

遇到循环时间比较长的代码,那么在循环之后的其他代码是不会被马上执行的。如下代码演示:

 1 class Person{
 2     String name;
 3     Person(String name){
 4         this.name = name;
 5     }
 6     void music()    {
 7         for (int i=1;i<=20;i++ )        {
 8             System.out.println(name+"在听第"+i+"首歌");
 9         }
10     }
11     void eat()    {
12         for (int i=1;i<=20;i++ )        {
13             System.out.println(name+"在吃第"+i+"口饭");
14         }
15     }
16 
17 }
18 
19 class MainThreadDemo{
20     public static void main(String[] args)     {
21         Person p = new Person("xxx");
22         p.music();        
23         p.eat();
24         System.out.println("听完歌吃完饭了,该睡觉了zzZZ~~~");
25     }
26 }

若在上述代码中music方法中的循环执行次数很多,这时在p.music();下面的代码是不会马上执行的,并且在dos窗口

会看到不停的输出”xxx在吃第几口饭”,这样的语句。为什么会这样呢?

原因:

jvm启动后,必然有一个执行路径(线程)从main方法开始的,一直执行到main方法结束,这个线程在java中称之为

主线程(main线程)。当程序的主线程执行时,如果遇到了循环而导致程序在指定位置停留时间过长,则无法马上

执行下面的程序,需要等待循环结束后能够执行。

那么,能否实现一个主线程负责执行其中一个循环,再由另一个线程负责其他代码的执行,最终实现多部分代码同时执行的效果?

答:当然能够实现同时执行,只要通过Java中的多线程技术来解决该问题。

 

以上是关于Java多线程详解的主要内容,如果未能解决你的问题,请参考以下文章

详解C++多线程

Java多线程:线程同步详解

Java线程池详解

Java线程池详解

Java 线程池详解

20160226.CCPP体系详解(0036天)