
正文
java无用的代码 java有意思的代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java中 synchronized没有用,代码如下。运行结果如图(不该出现非正数)。谢谢高手解答!!
package ergouge.thread.demo;
/*
nbsp;多线程模拟售票:三个窗口售票20张
nbsp;*/
class Ticket implements Runnable {
nbsp;nbsp;nbsp;nbsp;private int num = 20;
nbsp;nbsp;nbsp;nbsp;final String s = "hell";
nbsp;nbsp;nbsp;nbsp;public void run() { // 覆盖run方法
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;sell();
nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;// 解决线程安全
nbsp;nbsp;nbsp;nbsp;public void sell() {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;// synchronized (new Object()) { // 同步代码块,防止多个线程进入
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;// 同步代码块,防止多个线程进入
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;while (num gt; 0) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;// 放到这里也不行 synchronized(new Object()) { //
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;// 同步代码块,防止多个线程进入
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;synchronized (s) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;try {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Thread.sleep(500);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;} catch (InterruptedException e) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;} // 让线程sleep 0.5秒,测试线程安全问题
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;System.out.println(Thread.currentThread().getName() + "...sell ticket " + num--);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;}
}
public class TicketSale {
nbsp;nbsp;nbsp;nbsp;public static void main(String[] args) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Ticket x = new Ticket();
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Thread t1 = new Thread(x);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Thread t2 = new Thread(x);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Thread t3 = new Thread(x);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;t1.start();
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;t2.start();
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;t3.start();
nbsp;nbsp;nbsp;nbsp;}
}
楼主你仔细看下我该了以后的代码,先找到区别
有两点楼主要注意:
一、synchronized(newObject())相当于没有同步,同步的是同一块内存地址,你这样的话,每次都不是同一块内存地址,因此相当于没有同步
二、同步的范围:同步的范围不是越大越好,仔细想想看吧楼主,你的同步范围太大了
相关问答
Q1: 怎么知道代码中存在垃圾代码和冗余代码?
一个好的集成开发环境能告诉你,以开发java的IDEA为例:
1、声明却未使用的变量:
它会建议你删除该变量。
2、无用的初始值:
它也会建议你删除初始值。
3、不必要的变量:
它会建议直接返回就行,不需要定义额外的变量。
4、可以简化的if语句:
5、可以简化的for语句:
6、一些潜在的可能引起bug的地方:
将会引起空指针异常
没有检查泛型
7、重复代码:
重复的代码可以考虑合并成公共的方法。
还有太多例子我就不举例了,总之好的ide在开发过程中就能告诉我们很多潜在的问题,解决代码不规范的地方,像eclipse也有专门的插件来检查代码。
当然平时就养成好的开发习惯和好的代码规范,长期积累下来在开发过程中自己就能解决掉一大堆冗余代码。
Q2: 北大青鸟java培训:程序员如何避免无效代码的问题?
对于软件编程开发程序员来说,无效代码堆积以及代码质量低是很多新手容易犯的一些错误。
下面我们就一起来了解和学习一下,减少无效代码的堆积都有哪些方法。
当曾经向往的职业变成一日又一日的无用代码堆积,多少让开发者有些心灰意冷,虽然无法保证整个产品质量,但至少可以在代码层面下点功夫。
无用代码堆积这种现象在日常软件开发中非常普遍,对于需求频繁被修改的问题,根源在于弄清楚软件开发的目的是什么,代码有没有用的终决定者应该是用户,如果一段代码具备的功能符合用户需求,具备业务价值,那么就是有用的。
在软件开发过程中,需求变更和代码修改是很正常的事情,但这个不确定性需要在一定范围内。
对此,佳的解决方案可能是迭代开发,也叫迭代增量式开发,将整个开发周期分解为若干时间段,每隔一段固定时间就对软件进行一次小迭代,每迭代几次就进行一次全面测试和大版本更新,对开发成果进行质量评审,这个过程重要的是听取终用户的意见,以便及时调整优化,避免无效需求,尤其是决策者拍脑门出来的决定。
开发之前,技术负责人务必准备好相应文档,确定好各工程师的分工,尤其是需要协同完成的部分。
另外,团队尽量抽出时间和精力进行代码Review,并以降低代码复杂度为目标,如果不同工程师之间的代码间经常互相影响,可以考虑让这类程序员负责独立开发模块,降低对整个项目的影响。
长期以来,测试在国内的重视程度并不够,一个测试团队起码应该有白盒测试、效率测试、单元测试等各类专职人员,不建议在所有功能完成之后才开始测试,好是完成一个功能就马上交给测试,测试阶段应由测试完全掌握主动权,开发必须尊重测试人员的工作。
归根结底,贵阳北大青鸟认为软件开发是一项非常复杂的工作,为了避免过程出错,很多公司已经摸索并建立了成熟且完整的代码编写规范,包括变量命名规则、层次化设计、类和接口设计,到后的代码Review都很清楚,重要的不是会写代码,而是学会解决问题,做真正有价值的事情。
关于java无用的代码和java有意思的代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








