`

Java多线程编程#线程同步示例

阅读更多
1、线程不同步
在同一个进程中的线程都是独立运行的,线程之间会抢占cup,
执行先后顺序是不确定的,谁先得到谁就先执行

package com.boonya.multithread.explain;

/**==================================
 * 文件:WhyThreadNotSynchronized.java  
 * 描述:多线程不同步的原因 
 * ==================================
 */  
// 共享一个静态数据对象  
public class WhyThreadNotSynchronized {
	  
	public static void main(String[] args) {
		  MyTaskThread mythread1=new MyTaskThread("Thread1"); 
		  MyTaskThread mythread2=new MyTaskThread("Thread2"); 
		  mythread1.start();
		  mythread2.start();
	 }

}

class  MyTaskThread extends Thread{
	
	public MyTaskThread(){}
	
	public MyTaskThread(String threadName){
	   super(threadName);
    }

	@Override
	public void run() {
		  // 为了更清楚地看到不正确的结果,这里放一个大的循环   
	    for (int i = 0; i < 50; i++){   
		       if (this.getName().equals("Thread1")){   
		    	   Data.myData = "这是第 1 个线程";   
		           // 为了演示产生的问题,这里设置一次睡眠   
		           try{   
		               Thread.sleep((int)Math.random() * 100);   
		           }  catch(InterruptedException e){   
		           }   
		           // 输出结果   
		           System.out.println(this.getName() + ":" +  Data.myData);   
		       }else if (this.getName().equals("Thread2")){   
		    	   Data.myData = "这是第 2个线程";   
		           // 为了演示产生的问题,这里设置一次睡眠   
		          try{   
		              Thread.sleep((int)Math.random() * 100);   
		          } catch(InterruptedException e){   
		          }   
		         // 输出结果   
		         System.out.println(this.getName() + ":" + Data.myData);   
		       }   
		   }   
	}
 }

2、synchronized 线程同步

package com.boonya.multithread.explain;

import com.boonya.base.Data;

/**==============================  
 * 文件:SynchronizedThread.java  
 * 描述:多线程不同步的解决方法--锁  
 * ==============================
 */  
public class SynchronizedThread {
	
	public static void main(String[] args) {
		  MyTaskThread2 mythread1=new MyTaskThread2("Thread1"); 
		  MyTaskThread2 mythread2=new MyTaskThread2("Thread2"); 
		  mythread1.start();
		  mythread2.start();
	 }

}

class  MyTaskThread2 extends Thread{
	
	public MyTaskThread2(){}
	
	public MyTaskThread2(String threadName){
	   super(threadName);
    }

	@Override
	public void run() {
		// 为了更清楚地看到不正确的结果,这里放一个大的循环   
	    for (int i = 0; i < 50; i++){ 
		       if (this.getName().equals("Thread1")){   
		    	   // 锁定共享对象 
		    	   synchronized (Data.myData){
		    		   Data.myData=" is thread1 "+i;
			           // 为了演示产生的问题,这里设置一次睡眠   
			           try{   
			               Thread.sleep((int)Math.random() * 100);   
			           }  catch(InterruptedException e){   
			           }   
			           // 输出结果   
			           System.out.println(this.getName() + ":----------thread 1 excuted" );   
		    	   }
		       }else if (this.getName().equals("Thread2")){   
		    	   // 锁定共享对象 
		    	   synchronized (Data.myData){
		    		   Data.myData=" is thread2 "+i;
			           // 为了演示产生的问题,这里设置一次睡眠   
			          try{   
			              Thread.sleep((int)Math.random() * 100);   
			          } catch(InterruptedException e){
			          }   
			         // 输出结果   
			         System.out.println(this.getName() + ":----------thread 2 excuted");   
		    	   }
		       }   
		   }   
	}
 }
分享到:
评论

相关推荐

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的...以上内容只是《Java多线程编程核心技术》教程中的一部分核心知识点,实际学习中还需要结合具体示例和实践来深入理解和掌握。通过学习,开发者可以编写出高效、稳定的多线程Java程序。

    java多线程编程实例

    从给定的文件信息中,我们可以提取出关于Java多线程编程的重要知识点,涉及线程创建、线程生命周期以及线程间的同步与通信等核心概念。 ### Java多线程编程实例解析 #### 1. 创建线程的方式 在Java中,创建线程有...

    《Java多线程编程实例》随书源码

    《Java多线程编程实例》这本书深入浅出地探讨了Java中的多线程编程,通过丰富的实例帮助读者理解和掌握这一复杂主题。随书源码提供了实际操作的机会,以便读者能够亲手实践书中的示例,加深理解。 1. **线程创建...

    java 多线程示例

    Java多线程是Java编程中的重要概念,尤其在开发高性能、高并发的应用中不可或缺。本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要...

    java多线程编程-详细炒作例子

    ### Java多线程编程详解与实战案例 #### 理解多线程概念与Java内存模型 多线程,作为现代编程中的一项关键技术,允许在单一应用程序中并发执行多个指令流,每个这样的指令流被称为一个线程。在Java中,线程被视为...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程编程详解

    ### Java多线程编程详解:深入理解与实践 #### 一、理解多线程机制 多线程,作为现代编程语言的重要特性之一,允许在单一应用程序内并发执行多个任务,从而极大提升了程序的效率和响应速度。在Java中,多线程的...

    Java多线程编程

    ### Java多线程编程知识点详解 #### 一、Java多线程基础知识 ##### 1.1 什么是线程? 线程是程序中的最小执行单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。

    Java多线程编程实战指南(设计模式篇)

    《Java多线程编程实战指南(设计模式篇)》由黄文海撰写,是一本深入探讨Java多线程编程和设计模式的专业书籍。书中详细介绍了如何在Java环境中利用多线程来实现高效的并发处理,同时结合设计模式,帮助开发者更好地...

    java多线程编程实例_Source

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在本实例源码中,包含17个章节和上百个实例,旨在深入讲解Java多线程的核心概念和实际应用。 一、线程基础知识 在Java中,...

    4JAVA编程高级-多线程编程

    ### JAVA编程高级-多线程编程 #### 一、多线程简介 多线程编程是一种软件技术,它允许在单个程序内并发执行多个控制流。这种技术极大地提高了程序的执行效率和响应能力,特别是在现代多核处理器环境中。本文档主要...

    Java多线程编程实战指南核新篇&设计篇&以及和核新篇的案例代码

    总而言之,这本书全面覆盖了Java多线程编程的各个方面,不仅介绍了基础理论,还提供了实际操作示例,对于想要提升Java并发编程能力的开发者来说,是一份宝贵的资源。通过深入学习和实践,开发者不仅可以提升个人技能...

    Java多线程详解及示例

    Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步、通信、死锁避免等核心知识点,以及合理使用线程池,对于编写高效、稳定的并发程序至关重要。通过实践,开发者可以更好地...

    JAVA实现线程间同步与互斥生产者消费者问题

    在Java编程中,线程同步和互斥是多线程编程中的重要概念,它们用于解决多个线程同时访问共享资源时可能出现的问题。本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费...

    java多线程编程源码范例和详细说明(由浅入深,深度解读在资料后半部分).docx

    本文将通过一个简单的 Java 多线程编程示例,向读者介绍多线程的基本概念和使用方法。 线程的创建 要实现多线程编程,首先需要创建一个继承自 Thread 类的子类或实现 Runnable 接口的类。这两种方式都可以在 Java ...

    详细剖析JAVA多线程案例教学

    ### JAVA多线程案例教学详析 #### 一、引言 随着计算机技术的发展,多核处理器已经成为...通过上述介绍的学习资料,新入行的开发者可以快速掌握Java多线程编程的核心概念和技术实践,为进一步深入研究打下坚实的基础。

    Java多线程编程深入详解

    标题《Java多线程编程深入详解》所涉及的知识点涵盖了Java多线程编程的核心思想、原理以及在实际开发中可能遇到的问题和解决方案。以下是对这些知识点的详细阐述: 1. 多进程与多线程概念的区分和理解 - 进程是...

    java 多线程并发实例

    另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多线程编程中需要特别关注的。例如,死锁发生在两个或更多线程互相等待对方释放资源,导致它们都无法继续的情况。避免死锁的方法包括避免循环等待、设置...

Global site tag (gtag.js) - Google Analytics