`
skyxiewanting
  • 浏览: 12068 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

Java多线程的相关机制

阅读更多
    本文讲述了Java多线程的相关机制,分为线程的基本概念、线程的创建和启动、线程控制的基本方法和线程同步四个方面进行讲解。

一 线程的基本概念
线程是一个程序内部的顺序控制流.一个进程相当于一个任务,一个线程相当于一个任务中的一条执行路径.;多进程:在操作系统中能同时运行多个任务(程序);多线程:在同一个应用程序中有多个顺序流同时执行;Java的线程是通过java.lang.Thread类来实现的;JVM启动时会有一个由主方法(public static void main(){})所定义的线程;可以通过创建Thread的实例来创建新的线程;每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体,通过调用Thread类的start()方法来启动一个线程。
二 线程的创建和启动
可以有两种方式创建新的线程:
第一种:
1.定义线程类实现Runnable接口
2.Thread myThread = new Thread(target);   //target为Runnable接口类型
3.Runnable中只有一个方法:public void run();用以定义线程运行体
4.使用Runnable接口可以为多个线程提供共享的数据
5.在实现Runnable接口的类的run()方法定义中可以使用Thread的静态方法public static Thread currentThread();获取当前线程的引用

第二种:
1.可以定义一个Thread的子类并重写其run方法如:
class MyThread extends Thread {   
public void run() {...}

}   
2.然后生成该类的对象:
MyThread myThread = new MyThread();
三 线程控制的基本方法
isAlive():判断线程是否还"活"着
getPriority():获得线程的优先级数值
setPriority():设置线程的优先级数值
Thread.sleep():将当前线程睡眠指定毫秒数
join():调用某线程的该方法,将当前线程与该线程"合并",即等待该线程结束,再恢复当前线程的运行
yield():让出cpu,当前线程进入就绪队列等待调度
wait():当前线程进入对象的wait pool
notify()/notifyAll():唤醒对象的wait pool中的一个/所有等待线程
四 线程同步
实现生产者消费者问题来说明线程问题,举例如下所示:
1. /**  
2. * 生产者消费者问题  
3. */ 
4. package com.basic.thread;  
5.
6. /**  
7. * @author johnston678  
8. *  
9. * @version 2009-05-06  
10. */ 
11. public class ProducerConsumer {  
12.
13.      /**  
14.       * @param args  
15.       */ 
16.      public static void main(String[] args) {          
17.          ProductBox pb = new ProductBox();  
18.          Producer p = new Producer(pb);  
19.          Consumer c = new Consumer(pb);  
20.           
21.          Thread pThread = new Thread(p);  
22.          Thread cThread = new Thread(c);  
23.          pThread.setPriority(Thread.MAX_PRIORITY);  
24.           
25.          pThread.start();  
26.          cThread.start();  
27.      }  
28.
29. }  
30.
31. /**  
32. * 产品对象  
33. * @author johsnton678  
34. */ 
35. class Product {  
36.      int id;  
37.
38.      public Product(int id) {  
39.          super();  
40.          this.id = id;  
41.      }  
42.       
43.      public String toString(){  
44.          return "Product:" + id;  
45.      }  
46. }  
47.
48. /**  
49. * 产品盒对象  
50. * @author johnston678  
51. */ 
52. class ProductBox {  
53.
54.      Product[] productbox = new Product[6];  
55.      int index = 0;  
56.      public ProductBox() {  
57.          super();          
58.      }  
59.       
60.      public synchronized void push(Product p) {  
61.          while (index == productbox.length) {  
62.              try {  
63.                  this.wait();  
64.              } catch (InterruptedException e) {  
65.                  // TODO Auto-generated catch block  
66.                  e.printStackTrace();  
67.              }  
68.          }  
69.          this.notify();          
70.          productbox[index] = p;  
71.          index ++;  
72.      }  
73.       
74.      public synchronized Product pop() {  
75.          while (index == 0) {  
76.              try {  
77.                  this.wait();  
78.              } catch (InterruptedException e) {  
79.                  // TODO Auto-generated catch block  
80.                  e.printStackTrace();  
81.              }  
82.          }  
83.          this.notify();  
84.          index --;  
85.          return productbox[index];  
86.           
87.      }  
88. }  
89.
90. /**  
91. * 生产者  
92. * @author johnston678  
93. */ 
94. class Producer implements Runnable {  
95.
96.      ProductBox productbox = null;  
97.       
98.      public Producer(ProductBox productbox) {  
99.          super();  
100.          this.productbox = productbox;  
101.      }  
102.
103.      @Override 
104.      public void run() {  
105.          // TODO Auto-generated method stub  
106.          for (int i=0; i<10; i++) {  
107.              Product p = new Product(i);  
108.              productbox.push(p);  
109.              System.out.println("produce:" + p);  
110.               
111.              try {  
112.                  Thread.sleep((int)(Math.random() * 200));  
113.              } catch (InterruptedException e) {  
114.                  e.printStackTrace();  
115.              }  
116.          }  
117.      }  
118.       
119. }  
120.
121. /**  
122. * 消费者  
123. * @author johnston678  
124. */ 
125. class Consumer implements Runnable {  
126.
127.      ProductBox productbox = null;  
128.       
129.      public Consumer(ProductBox productbox) {  
130.          super();  
131.          this.productbox = productbox;  
132.      }  
133.
134.      @Override 
135.      public void run() {  
136.          // TODO Auto-generated method stub  
137.          for (int i=0; i<10; i++) {  
138.              Product p = productbox.pop();  
139.              System.out.println("consume:" + p);  
140.               
141.              try {  
142.                  Thread.sleep((int)(Math.random() * 1000));  
143.              } catch (InterruptedException e) {  
144.                  e.printStackTrace();  
145.              }  
146.          }  
147.      }  
148.       
149. }

分享到:
评论

相关推荐

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程同步机制研究分析.pdf

    Java多线程同步机制研究分析 Java多线程同步机制是Java编程语言中的一种机制,它允许多个线程同时执行,提高了系统资源的利用率和安全性。但是,多线程中最重要的问题是线程的同步和共享资源的访问保护。本文通过对...

    Java多线程同步机制的应用分析.pdf

    "Java多线程同步机制的应用分析" Java多线程同步机制的应用分析是指在Java...* Java语言的多线程机制 * 管程机制和同步语法的详细介绍 * Java多线程同步机制在售票系统中的应用 * Java多线程同步机制的优点和缺点分析

    java多线程机制 详解

    Java的多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,提升程序响应速度,优化资源利用率。在Java中,线程是程序执行的最小单位,一个进程可以包含多个线程,每个线程都有自己独立的生命周期,包括...

    JAVA多线程练习题答案。

    JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。...在实际开发中,正确地应用多线程机制可以显著提升程序的性能和用户体验。

    Java多线程通信机制研究.pdf

    "Java多线程通信机制研究" Java多线程通信机制是Java程序设计中的一个复杂技术,涉及到多个线程之间的通信和协作。多线程是一种程序运行机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,彼此...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程详解(比较详细的阐述了多线程机制)

    本文将深入探讨Java多线程机制,包括线程的创建、同步、通信以及常见设计模式。 首先,Java中创建线程主要有两种方式:通过实现Runnable接口和继承Thread类。实现Runnable接口更灵活,因为Java是单继承的,而通过...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    Java多线程机制(示例)

    ### Java多线程机制详解与示例 #### 一、Java多线程机制概述 Java中的多线程机制是程序设计中的一个重要概念,它允许在同一个应用程序中并发执行多个线程,有效地提高了程序的执行效率和响应速度。通过Java语言...

    java多线程进度条

    本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...

    Java多线程机制研究

    Java多线程机制研究.kdh Java多线程机制研究.kdh Java多线程机制研究.kdh

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    JAVA实现多线程并发机制

    在这个例子中,我们看到一个简单的Java多线程程序,用于模拟售票系统,其中有两个类`SellThread`和`AddThread`分别代表售票和加票的操作。 首先,我们来理解一下`SellThread`类。这个类实现了`Runnable`接口,这...

    汪文君JAVA多线程编程实战(完整不加密)

    《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...

    java多线程查询数据库

    综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。

    JAVAJAVA多线程教学演示系统论文

    《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...

Global site tag (gtag.js) - Google Analytics