Java多线程编程(三)线程的优先级、同步与死锁

简介:

线程的优先级:

  线程的优先级分为三种,分别是:

    1-MIN_PRIORITY

    10-MAX_PRIORITY

    5-NORM_PRIORITY

    如果什么都不设置默认值是5

 线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响。在默认状态下(比如说主线程)它的默认值是5

具体代码演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package  com.yeqc.thread;
 
class  ThRun  implements  Runnable{
 
     @Override
     public  void  run() {
         for ( int  i= 0 ; i< 5 ; i++){
             try  {
                 Thread.sleep( 1000 );
                 System.out.println(Thread.currentThread().getName()+ ":" +i);
             catch  (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }
     
}
 
public  class  ThreadDemo03 {
 
     public  static  void  main(String[] args) {
         Thread t1 =  new  Thread( new  ThRun(), "A" );
         Thread t2 =  new  Thread( new  ThRun(), "B" );
         Thread t3 =  new  Thread( new  ThRun(), "C" );
         t1.setPriority(Thread.MIN_PRIORITY);
         t2.setPriority(Thread.NORM_PRIORITY);
         t3.setPriority(Thread.MAX_PRIORITY);
         t1.start();
         t2.start();
         t3.start();
     }
 
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C: 0
A: 0
B: 0
C: 1
B: 1
A: 1
C: 2
A: 2
B: 2
C: 3
A: 3
B: 3
C: 4
B: 4
A: 4


同步与死锁:

  1.同步代码块

    在代码块上加上“synchronized”关键字,则此代码块就称为同步代码块

  2.同步代码块格式:

1
2
3
     sychronized(同步对象){
         需要同步的代码块;
     }

  3.同步方法

    除了代码块可以同步,方法也是可以同步的

  4.方法同步格式:

1
     sychronized  void  方法名称(){}

具体代码演示:

    1.同步代码块方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package  com.yeqc.thread;
 
class  MythreadDemo  implements  Runnable{
     
     private  int  ticket =  5 ;
 
     @Override
     public  void  run() {
         for  ( int  i =  0 ; i <  10 ; i++) {
             synchronized  ( this ) {
                 if  (ticket> 0 ) {
                     try  {
                         Thread.sleep( 500 );
                     catch  (InterruptedException e) {
                         e.printStackTrace();
                     }
                     System.out.println( "车票:" +ticket--);
                 }
             }
         }
     }
     
}
 
public  class  ThreadDemo04 {
 
     public  static  void  main(String[] args) {
         MythreadDemo m =  new  MythreadDemo();
         Thread t1 =  new  Thread(m);
         Thread t2 =  new  Thread(m);
         Thread t3 =  new  Thread(m);
         t1.start();
         t2.start();
         t3.start();
     }
 
}

运行结果:

1
2
3
4
5
车票: 5
车票: 4
车票: 3
车票: 2
车票: 1

    2.同步方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package  com.yeqc.thread;
 
class  MythreadDemo  implements  Runnable{
     
     private  int  ticket =  5 ;
 
     @Override
     public  void  run() {
         for  ( int  i =  0 ; i <  10 ; i++) {
             tell();
         }
     }
     public  synchronized  void  tell(){
         if  (ticket> 0 ) {
             try  {
                 Thread.sleep( 500 );
             catch  (InterruptedException e) {
                 e.printStackTrace();
             }
             System.out.println( "车票:" +ticket--);
         }
     }
}
 
public  class  ThreadDemo04 {
 
     public  static  void  main(String[] args) {
         MythreadDemo m =  new  MythreadDemo();
         Thread t1 =  new  Thread(m);
         Thread t2 =  new  Thread(m);
         Thread t3 =  new  Thread(m);
         t1.start();
         t2.start();
         t3.start();
     }
 
}

运行结果:

1
2
3
4
5
车票: 5
车票: 4
车票: 3
车票: 2
车票: 1

/**

 *死锁:学生找工作(高新)

 * 企业需要你有工作经验(经验)

 */

本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1769371


相关文章
|
2天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
11 3
|
2天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
12 2
|
2天前
|
Java 调度 开发者
Java中的多线程编程:基础与实践
【5月更文挑战第2天】本文将深入探讨Java中的多线程编程,从基础概念到实际应用,为读者提供全面的理解和实践指导。我们将首先介绍线程的基本概念和重要性,然后详细解析Java中实现多线程的两种主要方式:继承Thread类和实现Runnable接口。接着,我们将探讨线程同步的问题,包括synchronized关键字和Lock接口的使用。最后,我们将通过一个实际的生产者-消费者模型来演示多线程编程的实践应用。
|
2天前
|
安全 Java 程序员
Java中的多线程编程:从理论到实践
【5月更文挑战第2天】 在计算机科学中,多线程编程是一项重要的技术,它允许多个任务在同一时间段内并发执行。在Java中,多线程编程是通过创建并管理线程来实现的。本文将深入探讨Java中的多线程编程,包括线程的概念、如何创建和管理线程、以及多线程编程的一些常见问题和解决方案。
12 1
|
3天前
|
存储 安全 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第1天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细分析线程安全问题的根源,以及如何通过合理的设计和编码实践来避免常见的并发问题。同时,我们还将探讨如何在保证线程安全的前提下,提高程序的并发性能,包括使用高效的同步机制、减少锁的竞争以及利用现代硬件的并行能力等技术手段。
|
3天前
|
并行计算 Java 数据处理
Java中的多线程编程:基础知识与实践
【5月更文挑战第1天】本文将深入探讨Java中的多线程编程,包括其基本概念、实现方式以及实际应用。我们将从理论和实践两个角度出发,详细解析线程的创建、启动、控制以及同步等关键问题,并通过实例代码演示如何在Java中有效地使用多线程。
|
3天前
|
Java 程序员
Java中的多线程编程:从理论到实践
【5月更文挑战第1天】 在现代计算机科学中,多线程编程是一个重要的概念,它允许程序员在同一程序中并行运行多个任务。Java作为一种广泛使用的编程语言,提供了一套丰富的多线程编程工具。本文将介绍Java中多线程编程的基本概念,包括线程的创建、启动、控制和同步,以及一些常见的多线程问题和解决方案。
|
3天前
|
存储 Java 程序员
Java中的多线程编程:基础知识与实践
【5月更文挑战第1天】在现代计算机科学中,多线程是一种重要的并行计算技术,允许多个执行流程并发运行。本文将深入探讨Java语言中的多线程编程,从基础概念到实际应用,帮助读者理解多线程的核心原理,并通过实例学习如何在Java中创建和管理线程。我们将涵盖线程的生命周期、同步机制以及如何利用高级类如Executor框架来优化多线程应用的性能。通过本文的学习,读者将具备设计和实现高效、稳定多线程Java应用程序的能力。
6 2
|
Java
Java多线程编程核心技术(三)多线程通信(下篇)
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体。线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督。
662 0
|
Java
Java多线程编程核心技术(三)多线程通信(上篇)
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体。线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督。
2528 0