为了准备华为时找到的一些关于多线程的例子,再次发表一下:
ava中的线程
Java中实现多线程的类有两种方法
1.扩展java.lang.Thread类,用它覆盖Thread类的run方法。
2.生成实现java.lang.Runnable接口的类并将其它的实例与java.lang.Thread实例相关联
Thread类最重要的方法是run方法。run方法是新线程执行的方法
线程的几个重要的时间段:
·开始线程的初始化
·线程开始执行main()瞬间
·线程开始执行start()的瞬间
·start()创建一个新线程并返回main()的瞬间
·新线程的初始化
·新线程开始执行run()的瞬间
·每个线程结束的不同瞬间
注意新线程的初始化,它对run()的执行,和它的结束都与开始线程的执行同时发生。
警告
一个线程调用start()后,在run()方法退出前并发调用那方法将导致start()掷出一个java.lang.IllegalThreadStateException对象。
线程间发信
Object 类为此提供了三个函数:wait()、notify() 和 notifyAll()
当对一个线程调用 wait() 时,该线程就被有效阻塞,只到另一个线程对同一个对象调用 notify() 或 notifyAll() 为止
notify仅唤醒一个线程并允许它去获得锁,notifyAll是唤醒所有等待这个对象的线程并允许它们去获得对象锁
在调用wait的时候,线程自动释放其占有的对象锁,同时不会去申请对象锁。当线程被唤醒的时候,它才再次获得了去获得对象锁的权利。
wait就是等待这个对象的同步锁,不过调用这个方法必须先获得这个对象的同步锁
notify:唤醒在等待该对象同步锁的线程
首先是生产者和消费者问题
java 代码
- class Stor {
- String name = "";
-
- boolean full = false;
-
- public synchronized void setProduction(String name) {
- while (full) {
- try {
- this.wait();
- } catch (Exception e) {
- System.out.println(e.toString());
- }
- }
- full = true;
- System.out.println("ddddddddddddddd");
- this.notify();
-
- }
-
- public synchronized void getProduction() {
- while (!full) {
- try {
- this.wait();
- } catch (Exception e) {
- System.out.println(e.toString());
- }
- }
- full = false;
- System.out.println("ffffffffffffffffff");
- this.notify();
- }
- }
-
- class Custome extends Thread {
- Stor stor;
-
- public Custome(Stor stor) {
- this.stor = stor;
- }
-
- public void run() {
- while (true) {
- stor.getProduction();
- }
- }
- }
-
- class Productor extends Thread {
- Stor stor;
-
- public Productor(Stor stor) {
- this.stor = stor;
- }
-
- public void run() {
- while (true) {
- stor.setProduction("test");
- }
- }
- }
-
- public class Product {
- public static void main(String[] arg) {
- Stor stor = new Stor();
- Custome custome = new Custome(stor);
- custome.start();
- Productor productor = new Productor(stor);
- productor.start();
- }
- }
一个关于死锁的例子:
java 代码
- public class Test {
- public static void main(String[] args) {
- final Object resource1 = "resource1";
- final Object resource2 = "resource2";
-
- Thread t1 = new Thread() {
- public void run() {
-
- synchronized (resource1) {
- System.out.println("Thread 1: locked resource 1");
-
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- }
-
- synchronized (resource2) {
- System.out.println("Thread 1: locked resource 2");
- }
- }
- }
- };
-
-
- Thread t2 = new Thread() {
- public void run() {
- synchronized (resource2) {
- System.out.println("Thread 2: locked resource 2");
-
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- }
-
- synchronized (resource1) {
- System.out.println("Thread 2: locked resource 1");
- }
- }
- }
- };
-
-
-
- t1.start();
- t2.start();
- }
- }
分享到:
相关推荐
Java集合框架中有一些线程安全的类,如Vector、HashTable、ConcurrentHashMap等,它们内部实现了同步机制,可以在多线程环境中直接使用,避免了手动同步的复杂性。 十、线程局部变量 ThreadLocal为每个线程都创建了...
MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...
关于多线程的个人总结,包括概念理解、创建线程、线程同步安全、各类锁、线程状态、并行并发、异步同步等
GDB 调试多线程程序总结 GDB 调试多线程程序是一种复杂的调试技术,需要熟练掌握 GDB 的多线程调试命令。下面是 GDB 调试多线程程序的总结。 基本命令 在 GDB 中,使用 `info threads` 命令可以显示当前可调试的...
### Java多线程问题总结 #### 一、多线程的作用与优势 1. **发挥多核CPU的优势:** - 当今计算机硬件普遍配备有多核CPU,利用多线程技术能够有效地分配任务到不同的核心上,使得计算资源得到最大化利用。在双核...
【多线程精心总结】 在Java编程中,多线程是一种重要的并发处理方式,它可以提高程序的执行效率,尤其在处理大量并发任务时。本文将深入探讨Java线程中的几个关键概念,包括`yield()`、`sleep()`、`wait()`、`join...
java多线程全面总结,简单的介绍多线程技术中的各种应用问题,是你对多线程有更多的认识!
### 多线程基础 #### 1. 多线程概念 多线程是指在一个程序中包含多个控制流,它们可以并发执行不同的任务。在Java中,多线程的实现通常借助于`Thread`类或实现`Runnable`接口。多线程能够提高CPU的利用率,改善应用...
多线程基础理论, 多线程中常用API,多线程的实现方式, 线程池以及创建线程池相关API, 常见的设计模式等内容
【Windows多线程总结】 Windows操作系统提供了一套完整的API来支持多线程编程,使得开发者可以在同一进程中同时执行多个线程,实现并发处理任务。本文将深入探讨Windows多线程编程的基本概念、线程同步、线程池以及...
### 多线程知识总结 #### 一、线程基础概念 **线程状态:** 在探讨多线程之前,我们需要了解线程的基本状态转换。一个典型的线程生命周期包括以下几个阶段: 1. **Start(启动):** 当线程被创建后调用`start()`...
标题中的“关于多线程的专用书籍是真的”表明这是一本专门探讨多线程编程的书籍,而描述中的“多线程的专用书籍这是很好的”进一步确认了这本书的专业性和价值。多线程是计算机编程中一个重要的概念,尤其是在并发...
在Windows应用程序开发中,MFC(Microsoft Foundation Classes)框架提供了对多线程的支持,使得开发者可以构建更加复杂的并发系统。MFC中的线程分为两类:工作者线程和用户界面线程,它们各自有不同的特性和用途。 ...
### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...
本文将围绕“多线程一些经验”这一主题,结合内核对象和线程池,深入探讨多线程的实践与应用。 首先,内核对象在多线程编程中扮演着至关重要的角色。内核对象是由操作系统内核管理的一类特殊数据结构,如信号量、...
Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 ### 继承Thread类 在...
在IT行业中,多线程是程序并发执行的一种方式,它极大地提高了系统资源的利用率和程序...在学习过程中,可以参考"多线程基础总结01.bmp"和"多线程基础总结01.mmap"等文件,它们可能提供了更为详细和直观的结构化知识。
C#.net同步异步SOCKET通讯和多线程总结 C#.net同步异步SOCKET通讯和多线程总结是指在C#.net环境下实现的同步异步套接字通信和多线程编程的总结。套接字(Socket)是tcp/ip网络协议接口,内部定义了许多的函数和例程...