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多线程详解的主要内容,如果未能解决你的问题,请参考以下文章