java方法内调用方法,参数传递对象是否线程安全

问题描述

按自己的理解,线程执行,其中基本数据类型是放置于stack中,但引用堆中对象,当在方法中调用其他方法参数为对象时,是否每个对象针对线程唯一,是否线程安全,求赐教 问题补充:public class Business1 {public void method1(){System.out.println(Thread.currentThread().getName());User user = new User();user.setId(123456l);user.setUserName("showlike");user.setUserPwd("123456");user.setEmail("showlike@168.com");method2(user);System.out.println(Thread.currentThread().getName()+","+user.getEmail());}public void method2(User user){user.setEmail("showlike@189.com"+Thread.currentThread().getName());}}public class ManyThread {/** * @author showlike * @param args * @date 2014-8-1 上午09:58:31 */public static void main(String[] args) {final Business1 business = new Business1();for(int i = 0;i<100;i++){new Thread() { public void run() { business.method1(); } }.start();}}} 业务场景有点类似上面代码,运行未看到有多线程安全问题,还不是很明白线程内对象创建是否生命周期也是随线程结束而结束,未查到此方面资料,还望大牛们指点 ,谢!!!

解决方案

在你的例子中,每个user被封装在单独的thread中,即线程封装,这样是安全的。原因:无共享内存的操作。“线程内对象创建是否生命周期也是随线程结束而结束”,答案:在线程外该对象未被引用,线程结束后,该对象可视为已无用/已结束,后续GC将回收(与局部变量一样)。另:建议去看看并发编程的书吧。
解决方案二:
引起线程安全的考虑,其前提是:共享内存(共享对象),且对其进行修改。若多线程访问共享对象,但不修改其属性,则不需考虑线程安全;若多线程操作共享对象,即修改其属性,则须考虑线程安全。另针对“每个对象针对线程唯一”问题:若传递共享对象,则不唯一;若传递非共享对象,则唯一。
解决方案三:
看你的对象是否多线程共享的,如果不共享肯定安全!
解决方案四:
方法调用和线程有什么关系,又没有启动新的线程。传递的是对象的引用。指向对重的对象,只有一个。 线程不安全。

时间: 2024-09-15 21:54:19

java方法内调用方法,参数传递对象是否线程安全的相关文章

new-JAVA方法递归调用后,对象的值没改变

问题描述 JAVA方法递归调用后,对象的值没改变 void CreateBiTree(BiTree T){ Scanner in = new Scanner(System.in); T = new BiTree(); try{ T.data = in.nextInt(); } catch(InputMismatchException e){ T = null; return ; } CreateBiTree(T.lchild); CreateBiTree(T.rchild); } 输入153 .

android-Android- 在onTextChanged方法内调用setText

问题描述 Android- 在onTextChanged方法内调用setText 为了防止无限循环我是用了如下的代码: @Overrideprotected void onTextChanged(CharSequence text int start int lengthBefore int lengthAfter) { String t = text.toString(); String tt = t.toUpperCase(); if (!t.equals(tt)) { setText(tt

方法嵌套执行-方法嵌套调用,在嵌套方法执行结束执行方法嵌套调用

问题描述 方法嵌套调用,在嵌套方法执行结束执行方法嵌套调用 方法嵌套调用,在嵌套方法执行结束执行方法嵌套调用,在嵌套方法执行结束执行,主方法就执行完了,导致错误 解决方案 ?????? 方法可以返回对象的调用.基本数据类型或不返回任何值.例如,System.out.println():System.out.println()位于java.lang包中,它描述了Java所在系统的特有行为.System.out是一个类变量,它存储了PrintStream类的一个实例.该PrintStream对象表示

Java基础-05总结方法,数组(一维)

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:方法(掌握) (1)方法:就是完成特定功能的代码块.注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法.(2)格式:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {方

webservice-java使用axis调用方法:server was unable to process request

问题描述 java使用axis调用方法:server was unable to process request 本人第一次使用webservice,服务端不是用java开发的,我这边使用了网上的例子, 用的是axis,本地能够调试通过,但一旦部署到服务器上调用的过程中就会报错, 始终不明白为什么,不能处理请求?传的参数为空?可我已经把我发送的xml的字符串打印出来了啊.各位看看下图,有没有大神能提点一二,谢谢!! 解决方案 今天在项目ASP.NET调用远程服务器Webservice,出现如下错

.Net——动态调用方法

一,使用InvokeMember 思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数. 示例(对普通方法和对静态方法的调用): #region 动态调用方法--使用InvokeMember对一般方法的调用 //Type t = typeof(Calculator); //Calculator c = new Calculator(1, 2); //int resul

Javascript中的方法和匿名方法实例详解_javascript技巧

本文实例讲述了Javascript中的方法和匿名方法.分享给大家供大家参考.具体分析如下: Javascript方法(函数) 声明函数 以function开头,后跟函数名,与C#.java不同,Javascript不需要声明返回值类型.参数类型.没有返回值就是undefined. 举个例子更清楚:  无参数无返回值的方法: function f1(){ alert('这是一个方法'); } f1();//调用方法 无参数有返回值的方法: function f2(){ return 100; }

java中对象调用方法返回一个对象的问题

问题描述 java中对象调用方法返回一个对象的问题 例如session.createQuery(hql); 那么这条语句返回的对象属于哪个类呢,如何判断呢? 解决方案 ctrl加鼠标点击createQuery,会有返回方法,或者你在通过session点的时候也可以看到返回方法. 解决方案二: 按住ctrl点击方法,自己去看方法的返回值. 解决方案三: 在java中将一个对象的所有方法打印出来java中远程对象方法调用中的安全策略问题java中返回局部对象问题 解决方案四: 事实上他返回的还是qu

java语法-java的方法的方法体里面只能对象或者类调用方法是吧,不能再写方法了

问题描述 java的方法的方法体里面只能对象或者类调用方法是吧,不能再写方法了 java的方法的方法体里面只能对象或者类调用方法是吧,不能再写方法了 如果可以写,可以有大括号包含的方法体吗 解决方案 方法里面不能定义方法,可以调用方法