`
yousking
  • 浏览: 33390 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于多线程的一些总结

    博客分类:
  • J2EE
阅读更多

为了准备华为时找到的一些关于多线程的例子,再次发表一下:

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 代码
  1. class Stor {   
  2.     String name = "";   
  3.   
  4.     boolean full = false;   
  5.   
  6.     public synchronized void setProduction(String name) {   
  7.         while (full) {   
  8.             try {   
  9.                 this.wait();   
  10.             } catch (Exception e) {   
  11.                 System.out.println(e.toString());   
  12.             }   
  13.         }   
  14.         full = true;   
  15.         System.out.println("ddddddddddddddd");   
  16.         this.notify();   
  17.   
  18.     }   
  19.   
  20.     public synchronized void getProduction() {   
  21.         while (!full) {   
  22.             try {   
  23.                 this.wait();   
  24.             } catch (Exception e) {   
  25.                 System.out.println(e.toString());   
  26.             }   
  27.         }   
  28.         full = false;   
  29.         System.out.println("ffffffffffffffffff");   
  30.         this.notify();   
  31.     }   
  32. }   
  33.   
  34. class Custome extends Thread {   
  35.     Stor stor;   
  36.   
  37.     public Custome(Stor stor) {   
  38.         this.stor = stor;   
  39.     }   
  40.   
  41.     public void run() {   
  42.         while (true) {   
  43.             stor.getProduction();   
  44.         }   
  45.     }   
  46. }   
  47.   
  48. class Productor extends Thread {   
  49.     Stor stor;   
  50.   
  51.     public Productor(Stor stor) {   
  52.         this.stor = stor;   
  53.     }   
  54.   
  55.     public void run() {   
  56.         while (true) {   
  57.             stor.setProduction("test");   
  58.         }   
  59.     }   
  60. }   
  61.   
  62. public class Product {   
  63.     public static void main(String[] arg) {   
  64.         Stor stor = new Stor();   
  65.         Custome custome = new Custome(stor);   
  66.         custome.start();   
  67.         Productor productor = new Productor(stor);   
  68.         productor.start();   
  69.     }   
  70. }   

 

一个关于死锁的例子:

java 代码
  1. public class Test {   
  2.       public static void main(String[] args) {   
  3.         final Object resource1 = "resource1";   
  4.         final Object resource2 = "resource2";   
  5.         // t1 tries to lock resource1 then resource2   
  6.         Thread t1 = new Thread() {   
  7.           public void run() {   
  8.             // Lock resource 1   
  9.             synchronized (resource1) {   
  10.               System.out.println("Thread 1: locked resource 1");   
  11.   
  12.               try {   
  13.                 Thread.sleep(50);   
  14.               } catch (InterruptedException e) {   
  15.               }   
  16.   
  17.               synchronized (resource2) {   
  18.                 System.out.println("Thread 1: locked resource 2");   
  19.               }   
  20.             }   
  21.           }   
  22.         };   
  23.   
  24.         // t2 tries to lock resource2 then resource1   
  25.         Thread t2 = new Thread() {   
  26.           public void run() {   
  27.             synchronized (resource2) {   
  28.               System.out.println("Thread 2: locked resource 2");   
  29.   
  30.               try {   
  31.                 Thread.sleep(50);   
  32.               } catch (InterruptedException e) {   
  33.               }   
  34.   
  35.               synchronized (resource1) {   
  36.                 System.out.println("Thread 2: locked resource 1");   
  37.               }   
  38.             }   
  39.           }   
  40.         };   
  41.   
  42.         // If all goes as planned, deadlock will occur,   
  43.         // and the program will never exit.   
  44.         t1.start();   
  45.         t2.start();   
  46.       }   
  47.     }   
分享到:
评论

相关推荐

    Java多线程的总结

    Java集合框架中有一些线程安全的类,如Vector、HashTable、ConcurrentHashMap等,它们内部实现了同步机制,可以在多线程环境中直接使用,避免了手动同步的复杂性。 十、线程局部变量 ThreadLocal为每个线程都创建了...

    MFC多线程完整总结及示例代码

    MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    关于多线程的个人总结.xmind

    关于多线程的个人总结,包括概念理解、创建线程、线程同步安全、各类锁、线程状态、并行并发、异步同步等

    gdb调试多线程程序总结

    GDB 调试多线程程序总结 GDB 调试多线程程序是一种复杂的调试技术,需要熟练掌握 GDB 的多线程调试命令。下面是 GDB 调试多线程程序的总结。 基本命令 在 GDB 中,使用 `info threads` 命令可以显示当前可调试的...

    40个Java多线程问题总结

    ### Java多线程问题总结 #### 一、多线程的作用与优势 1. **发挥多核CPU的优势:** - 当今计算机硬件普遍配备有多核CPU,利用多线程技术能够有效地分配任务到不同的核心上,使得计算资源得到最大化利用。在双核...

    多线程精心总结

    【多线程精心总结】 在Java编程中,多线程是一种重要的并发处理方式,它可以提高程序的执行效率,尤其在处理大量并发任务时。本文将深入探讨Java线程中的几个关键概念,包括`yield()`、`sleep()`、`wait()`、`join...

    java多线程全面总结

    java多线程全面总结,简单的介绍多线程技术中的各种应用问题,是你对多线程有更多的认识!

    自己总结的多线程

    ### 多线程基础 #### 1. 多线程概念 多线程是指在一个程序中包含多个控制流,它们可以并发执行不同的任务。在Java中,多线程的实现通常借助于`Thread`类或实现`Runnable`接口。多线程能够提高CPU的利用率,改善应用...

    多线程基础总结.xmind

    多线程基础理论, 多线程中常用API,多线程的实现方式, 线程池以及创建线程池相关API, 常见的设计模式等内容

    windows多线程总结

    【Windows多线程总结】 Windows操作系统提供了一套完整的API来支持多线程编程,使得开发者可以在同一进程中同时执行多个线程,实现并发处理任务。本文将深入探讨Windows多线程编程的基本概念、线程同步、线程池以及...

    多线程知识总结

    ### 多线程知识总结 #### 一、线程基础概念 **线程状态:** 在探讨多线程之前,我们需要了解线程的基本状态转换。一个典型的线程生命周期包括以下几个阶段: 1. **Start(启动):** 当线程被创建后调用`start()`...

    关于多线程的专用书籍是真的

    标题中的“关于多线程的专用书籍是真的”表明这是一本专门探讨多线程编程的书籍,而描述中的“多线程的专用书籍这是很好的”进一步确认了这本书的专业性和价值。多线程是计算机编程中一个重要的概念,尤其是在并发...

    MFC 多线程总结

    在Windows应用程序开发中,MFC(Microsoft Foundation Classes)框架提供了对多线程的支持,使得开发者可以构建更加复杂的并发系统。MFC中的线程分为两类:工作者线程和用户界面线程,它们各自有不同的特性和用途。 ...

    java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...

    多线程一些经验

    本文将围绕“多线程一些经验”这一主题,结合内核对象和线程池,深入探讨多线程的实践与应用。 首先,内核对象在多线程编程中扮演着至关重要的角色。内核对象是由操作系统内核管理的一类特殊数据结构,如信号量、...

    java多线程总结(一)

    Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 ### 继承Thread类 在...

    多线程基础个人总结思维导图

    在IT行业中,多线程是程序并发执行的一种方式,它极大地提高了系统资源的利用率和程序...在学习过程中,可以参考"多线程基础总结01.bmp"和"多线程基础总结01.mmap"等文件,它们可能提供了更为详细和直观的结构化知识。

    C#.net同步异步SOCKET通讯和多线程总结

    C#.net同步异步SOCKET通讯和多线程总结 C#.net同步异步SOCKET通讯和多线程总结是指在C#.net环境下实现的同步异步套接字通信和多线程编程的总结。套接字(Socket)是tcp/ip网络协议接口,内部定义了许多的函数和例程...

Global site tag (gtag.js) - Google Analytics