本文讲述了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编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
Java多线程同步机制研究分析 Java多线程同步机制是Java编程语言中的一种机制,它允许多个线程同时执行,提高了系统资源的利用率和安全性。但是,多线程中最重要的问题是线程的同步和共享资源的访问保护。本文通过对...
"Java多线程同步机制的应用分析" Java多线程同步机制的应用分析是指在Java...* Java语言的多线程机制 * 管程机制和同步语法的详细介绍 * Java多线程同步机制在售票系统中的应用 * Java多线程同步机制的优点和缺点分析
Java的多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,提升程序响应速度,优化资源利用率。在Java中,线程是程序执行的最小单位,一个进程可以包含多个线程,每个线程都有自己独立的生命周期,包括...
JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。...在实际开发中,正确地应用多线程机制可以显著提升程序的性能和用户体验。
"Java多线程通信机制研究" Java多线程通信机制是Java程序设计中的一个复杂技术,涉及到多个线程之间的通信和协作。多线程是一种程序运行机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,彼此...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...
本文将深入探讨Java多线程机制,包括线程的创建、同步、通信以及常见设计模式。 首先,Java中创建线程主要有两种方式:通过实现Runnable接口和继承Thread类。实现Runnable接口更灵活,因为Java是单继承的,而通过...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
### Java多线程机制详解与示例 #### 一、Java多线程机制概述 Java中的多线程机制是程序设计中的一个重要概念,它允许在同一个应用程序中并发执行多个线程,有效地提高了程序的执行效率和响应速度。通过Java语言...
本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...
Java多线程机制研究.kdh Java多线程机制研究.kdh Java多线程机制研究.kdh
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...
在这个例子中,我们看到一个简单的Java多线程程序,用于模拟售票系统,其中有两个类`SellThread`和`AddThread`分别代表售票和加票的操作。 首先,我们来理解一下`SellThread`类。这个类实现了`Runnable`接口,这...
《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...