`

java多线程实验04

    博客分类:
  • JAVA
阅读更多

实验synchronized的作用和使用时的注意事项,还要注意join的用法

 

实验结果出一致的数据才正确,否则说明会有线程安全问题。

 

package org.coffeesweet.test01;

public class Test04 {
		
		private Object oLock=new Object();//改成static就没问题了
		//锁对象必须是所有线程共享的
		private static int a=10;

		public static void main(String...args) throws InterruptedException{
			Test04 t04=new Test04();
			Test04 t04_2=new Test04();
			Thread ta=new Thread(t04.new A(),"Thread-A");
			Thread tb=new Thread(t04.new B(),"Thread-B");
			Thread ta2=new Thread(t04_2.new A(),"Thread-A");
			Thread tb2=new Thread(t04_2.new B(),"Thread-B");
			System.out.println("a---start:"+t04.a);
			tb.start();
			ta.start();
			tb2.start();
			ta2.start();
			ta.join();
			tb.join();
			ta2.join();
			tb2.join();
			System.out.println("a---end:"+t04.a);
		}
		
		//如果这里用方法的synchronized,则必须保证该方法所在对象是所有线程共享的
//		public void testMethord1(){
//			synchronized(oLock){
//			System.out.println("testMethord1:start:"+a);
//			for(int i=0;i<100000;i++)
//				a=a+1;
//			System.out.println("testMethord1:end:"+a);
//			}
//		}
//		
//		public  void testMethord2(){
//			synchronized(oLock){
//			System.out.println("testMethord2:start:"+a);
//			for(int i=0;i<100000;i++)
//				a=a-1;
//			System.out.println("testMethord2:end:"+a);
//			}
//		}
		
		public synchronized void testMethord1(){
			
			System.out.println("testMethord1:start:"+a);
			for(int i=0;i<100000;i++)
				a=a+1;
			System.out.println("testMethord1:end:"+a);
		}
		
		public synchronized  void testMethord2(){
			
			System.out.println("testMethord2:start:"+a);
			for(int i=0;i<100000;i++)
				a=a-1;
			System.out.println("testMethord2:end:"+a);
		}
		
		private class A implements Runnable{
			
			@Override
			public void run() {
				testMethord1();
			}
			
		}
		
		private class B implements Runnable{
			
			@Override
			public void run() {
				testMethord2();
			}
			
		}
		
		private class synTestClass{
			private Object ob2=new Object();
			
		}
}

 

分享到:
评论

相关推荐

    武汉理工大学Java多线程实验源码

    这些可能是按照课程进度逐步进阶的多线程实验,每个实验可能包含一个或多个Java类,用于演示和练习不同的多线程技术。例如,CTExp01可能涉及线程的基本创建和启动,CTExp03可能涉及到线程同步和互斥,而CTExp06和...

    java多线程实验报告.doc

    在本实验中,学生被要求通过编写两个不同的Java多线程程序来理解和掌握这一核心技术。 实验的第一个任务是创建一个多线程程序,该程序能够在一个线程中寻找整数序列的最大值,而在另一个线程中更新用户界面。在这个...

    JAVA多线程实验报告

    在本实验报告中,我们探讨了Java多线程技术在实际编程中的应用,特别是通过编写applet程序展示了如何实现滚动字符串和动态动画效果。实验主要分为两个部分:滚动字符串和蓝色反弹球。以下是对这些知识点的详细说明:...

    JAVA多线程实验,字符移动、小球碰撞

    总的来说,通过“JAVA多线程实验,字符移动、小球碰撞”这两个案例,我们可以学习到如何在Java中创建线程、实现线程间的通信和同步,以及如何有效地管理线程资源。这些知识对理解和编写高效的并发程序至关重要,是每...

    Java多线程技术(实验)

    ### Java多线程技术知识点详解 #### 一、实验目的 本实验旨在帮助学习者深入理解Java中的多线程编程技巧。具体目标包括: 1. **掌握Java中的多线程编程**:熟悉如何在Java中利用多线程来提高程序性能和响应能力。...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    实验八:Java多线程

    ### 实验八:Java多线程 #### 一、实验目的与知识点概述 在本实验中,我们将深入了解线程与进程的基本概念、它们之间的区别与联系,并掌握多线程技术在Java中的应用方法。具体包括以下几点: 1. **线程与进程的...

    实验五 java多线程程序设计代码.zip

    java多线程程序设计代码.zip实验五 java多线程程序设计代码.zip实验五 java多线程程序设计代码.zip实验五 java多线程程序设计代码.zip实验五 java多线程程序设计代码.zip实验五 java多线程程序设计代码.zip实验五 ...

    操作系统-java多线程实验.pdf

    【操作系统-Java多线程实验】的实验主要涵盖了Java中多线程的创建、互斥与同步的概念及其应用。在Java中,实现多线程有两种方式:继承Thread类或实现Runnable接口。本实验中选择了实现Runnable接口的方式,通过定义...

    java多媒体与多线程处理实验

    ### Java多媒体与多线程...通过本次实验,学生不仅掌握了Java多线程编程的基础知识,还学会了如何利用多线程优化程序性能,特别是在多媒体应用领域,如动画、音视频处理等,为后续更复杂的应用开发奠定了坚实的基础。

    Java多线程实例 Java的小实验

    Java多线程是Java编程中一个...总的来说,Java多线程实验旨在让学生掌握如何在Java环境中创建和管理线程,理解线程的并发执行、资源竞争和同步控制。这个实验对于培养学生的编程技能和解决问题的能力有着积极的作用。

    WHUT-java多线程实验-第三周-文件上传和下载.zip

    在“WHUT-java多线程实验-第三周-文件上传和下载.zip”这个实验中,我们将重点探讨如何在多线程环境中实现文件的上传和下载功能。这个实验基于IntelliJ IDEA开发环境,它是一个流行的Java集成开发环境,提供了丰富的...

    《软件开发基础(Java)》实验报告-Java多线程编程.docx

    在本实验报告中,我们关注的是Java多线程编程,这是Java编程中一个重要的主题,尤其是在并发处理和高性能系统设计中。线程是操作系统分配CPU时间的基本单位,它允许一个程序内部同时执行多个任务,提高了应用程序的...

    WHUT-java多线程实验-第一周-继承、多态.zip

    本实验“WHUT-java多线程实验-第一周-继承、多态”是针对武汉理工大学学生的面向对象与多线程课程的一个实践环节,旨在通过IDEA集成开发环境帮助学生深入理解并应用Java中的封装、继承和多线程概念。 1. 封装:封装...

    Java多线程编程总结

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

    Java实验9多线程设计.doc

    Java实验9主要关注多线程的设计与应用,涵盖了线程的基本概念、创建、管理与控制,以及线程同步和互斥。以下是对实验内容的详细解释: 1. **线程概念**: Java中的线程是程序执行的最小单位,一个进程中可以包含多...

    多线程实验报告.docx

    在本实验中,我们主要探讨的是Java编程中的多线程技术及其在实际应用中的实现。...总的来说,这个多线程实验旨在让学生通过实际操作,加深对Java多线程编程的理解,提高编程技能,并锻炼解决问题的能力。

    Java_多线程与并发编程总结.doc

    Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...

Global site tag (gtag.js) - Google Analytics