`
envy2002
  • 浏览: 153899 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 多线程学习总结3

阅读更多

线程的死锁

 如果多个线程操作多个对象互相请求,那么会引起死锁。

 

package deadlock;

public class SomeBody {
	private String name;
	private SomeBody other;
	public SomeBody(String name)
	{
		this.name=name;
	}
	
	public synchronized void  saySomeThing()
	{
		System.out.println(this.name+"1111111111"+Thread.currentThread());
		//某个对象进入此锁后,休息一会,确保同时另外一个对象已经占有它自己的锁,
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		other.singSomeThing();//让另外一个对象请求它已经占有的锁
		System.out.println(this.name+"222222222222"+Thread.currentThread());
		System.out.println(this.name+"33333333333"+Thread.currentThread());
		System.out.println(this.name+"44444444444"+Thread.currentThread());
	}
	
	public synchronized void singSomeThing()
	{
		System.out.println(this.name+"AAAAAAAAAAA"+Thread.currentThread());
		System.out.println(this.name+"BBBBBBBBBBBBBB"+Thread.currentThread());
//		某个对象进入此锁后,休息一会,确保同时另外一个对象已经占有它自己的锁,
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		other.saySomeThing();//让另外一个对象请求它已经占有的锁
		System.out.println(this.name+"CCCCCCCCCCCC"+Thread.currentThread());
		System.out.println(this.name+"DDDDDDDDDDDDD"+Thread.currentThread());
	}
    public void setOther(SomeBody other)
    {
    	this.other=other;
    }

}

 线程1:

ublic class xiaoming extends Thread{
    private SomeBody somebody;
  
    public xiaoming(SomeBody somebody)
    {
    	this.somebody=somebody;
    	
    }

    public void run()
    {
    	somebody.saySomeThing();
    
    }
}

 

线程2:

package deadlock;

public class dagang extends Thread{
    private SomeBody somebody;
  
    public dagang(SomeBody somebody)
    {
    	this.somebody=somebody;
    	
    }

    public void run()
    {
    	somebody.singSomeThing();
    	
    }

}

  程序入口:

package deadlock;

public class main {
	public static void main(String args[])
	{
		SomeBody mingming=new SomeBody("小明");
		SomeBody ganggang=new SomeBody("大刚");
		mingming.setOther(ganggang);
		ganggang.setOther(mingming);
		
		Thread thread1=new xiaoming(mingming);
		Thread thread2=new dagang(ganggang);
		thread1.start();
		thread2.start();
		
		
	}

}

 

结果:

小明1111111111Thread[Thread-0,5,main]
大刚AAAAAAAAAAAThread[Thread-1,5,main]
大刚BBBBBBBBBBBBBBThread[Thread-1,5,main]

 

 

 解释:

导致各自占有,互相排斥,故死锁了!

分享到:
评论

相关推荐

    Java中的多线程学习总结

    ### Java中的多线程学习总结 #### 一、线程与进程的概念 在计算机科学中,**进程**和**线程**是两个重要的概念。早期的Windows 3.x系统中,进程是最小的运行单位。到了Windows 95/NT等操作系统中,除了进程外还...

    Java多线程的总结

    Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。...通过深入学习和实践上述Java多线程的知识点,开发者能够构建出高效、稳定、可控的多线程程序,满足各种复杂的并发需求。

    Java 多线程学习总结6

    在“Java多线程学习总结6”这个主题中,我们可以深入探讨Java多线程的实现、管理及优化。下面将详细阐述相关知识点。 1. **线程的创建方式** - **继承Thread类**:自定义类继承Thread类,并重写run()方法,创建...

    Java 多线程学习总结归纳(附代码)

    下面是对Java多线程学习的详细解析。 1. **多线程概述**: 多线程是指一个程序内可以同时执行多个独立的执行流,每个执行流被称为一个线程。Java通过Thread类来代表线程,每个线程都有自己的生命周期,包括新建、...

    Java多线程学习总结.pdf

    Java多线程学习总结.pdf

    java多线程学习资料

    ### Java多线程学习资料知识点解析 #### 一、引言 Java作为一种广泛使用的编程语言,在并发编程领域具有独特的优势。多线程是Java中实现并发处理的核心技术之一,能够显著提升程序的性能和响应性。本文将深入探讨...

    java多线程编程总结

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

    java多线程学习-ftp上传

    总结来说,Java多线程学习和FTP上传结合,可以帮助我们构建高效、可控的文件上传服务。通过线程池,我们可以更好地管理并发任务,优化资源使用,提高FTP上传的性能。学习这些内容对于Java开发者尤其重要,尤其是在...

    Java线程学习和总结

    本文档("Java线程学习和总结.htm")可能包含了更多关于线程的实例、源码分析和常见问题解决方案,你可以通过阅读来进一步加深对Java线程的理解。同时,"Java线程学习和总结.files"目录下的文件可能是与文章相关的...

    Java多线程学习总结

    Java多线程是编程中的重要概念,尤其在开发高并发、高性能的应用时不可或缺。本文将深入探讨Java中的线程和进程,以及如何在Java中实现多线程。 首先,理解线程和进程的概念至关重要。线程是操作系统分配CPU时间片...

    JAVA多线程编程技术PDF

    总结起来,“JAVA多线程编程技术PDF”涵盖了多线程的基本概念、同步机制、线程通信、死锁避免、线程池以及线程安全的集合类等内容。通过深入学习这份资料,开发者可以全面掌握Java多线程编程技术,提升程序的并发...

    Java 多线程学习详细总结

    【Java 多线程学习详细总结】 在Java编程中,多线程是处理并发执行任务的关键技术。本文将深入探讨Java中的多线程概念、实现方式、线程状态转换、线程调度、线程同步以及数据传递等相关知识。 1. **扩展`java.lang...

    java多线程学习总结.docx

    ### Java多线程学习总结 #### 一、Java多线程基本概念 1. **线程状态** - Java中的线程状态分为以下几种:新生(New)、可运行(Runnable)、运行(Running)、等待/阻塞(Waiting/Blocked)以及终止(Terminated...

Global site tag (gtag.js) - Google Analytics