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

Java 多线程学习总结2

阅读更多

并发执行最理想的状况是让一些“毫不相干”的Somebody自己做自己的事情,和别人无关。但是事实让确非如此,因为在哲学上讲,世界是一个整体,每个个体之间都存在联系,我们让一些东西不相干,是我们人类为了简化问题,而从概念上进行的分割划分,呵呵。事实上,如果某个Somebody为多个线程共享,其中的某些域可能成为公共数据。多线程对公共资源的访问可能不会按照你的意愿。

public class SomeBody {
	private int a,b;
	public SomeBody(int a, int b)
	{
		this.a=a;
		this.b=b;
	}
	//a和b不停地同时增加。
	public void increase()
	{
		while(true)
		{
			a++;
			b++;
			
		}
	}
	//不停地检查a和b是否相等。
	public void show()
	
	{
		while(true)
		{
		System.out.println("a= "+a+"  b="+b+"a=?b "+(a-b));
		}
	}



}

 a和b同时增加的线程:

 

public class Increase extends Thread{
	private SomeBody somebody;
	public Increase(SomeBody somebody)
	{
		this.somebody=somebody;
	}
	
	public void run()
	{
		somebody.increase();
	}

}

 检查a,b是否相等的线程:

public class Show extends Thread{
	private SomeBody somebody;
	public Show(SomeBody somebody)
	{
		this.somebody=somebody;
	}
	
	public void run()
	{
		somebody.show();
	}


}

 

程序入口:

public class main {
	public static void main(String args[])
	{   SomeBody somebody=new SomeBody(1,1);
		Thread thread1=new Increase(somebody);
		Thread thread2=new Show(somebody);
		thread1.start();
		thread2.start();
		
	}

}

 在show方法打了断点的调试结果:

a= -1988840804  b=-1988840804a=?b 0
a= -14091620  b=-14091620a=?b 0
a= 384001584  b=384001584a=?b 0
a= 778866029  b=778866029a=?b 0
a= 1186839591  b=1186839591a=?b 0
a= 1751989311  b=1751989311a=?b 0
a= -1663360948  b=-1663360949a=?b 1
a= -754997646  b=-754997647a=?b 1
a= -337072596  b=-337072597a=?b 1
a= -78442815  b=-78442816a=?b 1
a= 290940999  b=290940998a=?b 1
a= 662999761  b=662999760a=?b 1
a= 954816967  b=954816967a=?b 0
a= 1388427731  b=1388427730a=?b 1
a= 1881242049  b=1881242049a=?b 0

 其原因就是在a和b在increase的时候,a++完毕后,increase线程切换到了show线程,导致a!=b,所以我们需要互斥,下回说说互斥。

分享到:
评论

相关推荐

    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