码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程详解

时间:2019-02-08 23:34:53      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:color   person   str   png   内部类   运行   dos   有一个   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多线程详解

标签:color   person   str   png   内部类   运行   dos   有一个   java   

原文地址:https://www.cnblogs.com/wyb666/p/10356890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!