java 线程同步的类和非线程同步的类(api中的类)有什么区别? 就比如StringBulid和StringBuffer一个非同步,一个同步,但是我用这两个类型的时候感觉不到区别,但是实质上的区别是什么呢,什么时候用哪个?我就知道线程类内存开销大,但是就是具体应用的区别,我感觉不到,有没有高手举例说明一下呢 ?谢谢了 ! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你只用这两个类,并且你的代码很简单的话,同步和非同步你跟本不会感觉到的。但是如果你的代码足够复杂,并且用了不止这两个类的话,就会发现不一样如果你查看了这两个类的源码后就会发现不一样的,StringBuild的每一个方法前都会有一个关键字synchronized,这也是StringBuild类和StringBuffer类的本质区别,当在一个线程中,StringBuild类的一个方法正在被使用,这个方法源码中前面有synchronized关键字,那么其它的线程就不能同时调用这个类的方法。这个线程只能处于阻塞状态,直到正在调用这个方法的线程结束了,它才能由阻塞继续执行,调用这个方法。而StringBuffer就不会的上述的那种情况,两个线程可以同时用StringBuffer类中的同一个方法这就是同步与非同步的本质区别。当看到这进而你应该知道什么时候用StringBuild,什么时候用StringBuffer了,前者从线程来看要安全得多,要知道,一个数据同时被两个线程操作的话,会出现线程安全问题,因为你不会确定操作之后会是什么结果。如果程序代码足够复杂的话,这是十危险的!上面是我个人的理解,有什么不对的多多批评指正 果你要研究线程同步的问题,自己尝试着做个例子是最合适的了。你尝试做一个银行账户类,成员变量为余额,提供存钱set,取钱get方法。(不要添加synchronized关键字)然后做两个用户类,一个线程取钱,一个存钱,然后测试类启用两个线程。看效果。然后加上synchronized再看效果。你就会发现加上synchronized是符合常理的结果。说直白一点,加上synchronized之后就是一个线程调用该方法时,其它线程不允许使用该方法。至于其优势,就应该在例子中慢慢体会了。 单线程用Stringbuilder,多线程用后者! ssl证书问题啊。。。。。。。。。。。keytool 如何在JTextField里显示一些字符,当鼠标点击JTextField区域后这些字符清空? 怎么把写好的游戏代码(eclipse写的)弄成游戏啊? Java硬件编程 学习中遇到问题,关于java的二分查找法,高人请进! Applet如何与数据库中的数据交互 请教:在一个java程序里post数据出去,url用localhost就可以,换ip就不行了 Vector中他的元素可以是Vector型的吗? 学习java的分类书籍 我要考SCJP,希望大家指教 class反编译出现goto如何解决? 找不到或无法加载主类 per1.Cland
上面是我个人的理解,有什么不对的多多批评指正
你尝试做一个银行账户类,成员变量为余额,提供存钱set,取钱get方法。(不要添加synchronized关键字)
然后做两个用户类,一个线程取钱,一个存钱,然后测试类启用两个线程。看效果。
然后加上synchronized再看效果。
你就会发现加上synchronized是符合常理的结果。
说直白一点,加上synchronized之后就是一个线程调用该方法时,其它线程不允许使用该方法。
至于其优势,就应该在例子中慢慢体会了。