解决方案 »

  1.   

    它们的目的是相同的,都可以很好控制程序执行流程;多线程是为了提高CPU的利用率,在某个线程高速缓存或者执行等待时,可以通知其它线程执行,需要考虑执行效率的多任务的程序中可以考虑使用多线程。
    同步方法的比较可以参照这个文章:
    http://z-jiankun.iteye.com/blog/1408471
      

  2.   

    WINDOWS中CPU的分配基于线程,每个线程的所有代码不一定都是加锁的,所以一个进程中如果有多个线程,那么执行多线程中的非同步代码时比一个进程只有一个线程快。如果进程中有多个线程但是每个线程的所有代码都需要同步的话就和进程只有一个线程的效率是相同的。
      

  3.   

    楼主是说多个线程synchronized 一个块的时候 多线程是不是串行执行了?
    实际上是的。但是除了synchronized块内的方法 其他的内容是多线程执行的。所以还是并行执行的 效率还是比单线程快的
    目前来说 如果程序中有遇到必须需要串行执行的地方,一般我都会采用从数据库层分离数据来保证程序是真正的多线程 而不是采用synchronized
      

  4.   


    例子不错,尽管用synchronized会降低效率
      

  5.   

    比如做饭单线程:煮饭 -> 饭熟后洗菜->切菜->炒菜->炖肉
    多线程:者饭,同时洗菜,洗完菜后可以炖肉,在炖肉的同时可以切别的菜,炒别的菜
      

  6.   

    使用同步是为了不引起数据操作的异常,其实对于单CPU来说,多线程其实也算是单线程,只不过是单线程一般只能完成一条线上的事。如果你的主界面线程在处理数据,那这时你点击了界面的按钮,他要响应,单线程就卡死了。多线程中同步在很多地方都有用到的,确实在用他的时候,只能有一个线程来访问,其实线程都在等待。但是有时单线程有很多问题,比如上面说的那个,还有比如,网上买火车票,你总不能把所有人要买票时都弄到一个线程去。那你得让人家等多久呀,得一个人全买完票了,其它人才能买。
      

  7.   

    例如下载一首歌曲为10M,采用单线程的方式,那么只能从开头到结束,如果中途出现了什么问题,那么它就不能往下执行了,如果使用多线程,例如开辟2个线程,那么每个线程可以下载5M,这就涉及到一个断点下载的问题了,效率肯定比单线程快,如果里面包含synchronized方法,那么第一个线程在进行任务了,突然出现了什么问题,那么我们可以让第二个线程执行任务,相比于单线程来说效率更高
    其实设计synchronized的目的是在使用多线程的时候从安全性方面去考虑的,例如在一个方法中修改一个全局变量,如果使用单线程当然是没什么问题的,一个线程进来我就自己一个人修改,也不会影响什么,但是如果在多线程环境中,很多线程同时访问这个方法修改全局变量,那么就可能会出问题了,可能你争我抢(分配到CPU资源)把这个全局变量改的不成样子了,所以考虑安全性,我们使用synchronized,如果有多个线程,表示你们得一个一个排队来,如果我进去方法里面了,那么我就把门给锁上,只有我一个在里面修改全局变量,你们都不能进来,等我处理完成了,我再释放锁,然后让下一个进来修改,这样也就确保了全局变量不会被改的乱七八糟不成样子了,因为很多项目中会有这样的需求,所以我们得根据需求来确定相应的解决方案!!
      

  8.   

    java 中使用 synchronized 是用来 表示该资源或者该方法是不能进行多个线程的共享的,所以当多个线程都在请求该资源的时候,就跟串行是一样的也就是单线程效果一样,但是当不为共享的时候就可以利用并发来大大的提高系统的效率。
      

  9.   

    进程和线程的知识是编码中最难理解的知识之一,本质来说它是操作系统层面的问题。
    就你问题而言,有几点必须说明。
    1、多线程并不解决软件执行效率和你硬件系统的瓶颈,它只是达到更高效使用你的硬件系统资源。
    2、从本质上来说,单核单CPU不存在并行,即使多线程也是串行,多线程不会提高CPU利用率。
    3、对于同步块与单线程执行比较,并不存在多少性能差异,如果相比较,同步块的执行效率还要大大低于单线程程序,如果设计差,可能还是灾难级的。因为同步本身就需要占用系统资源和CPU片段,而且每个线程自己也需要占用资源,如果多线程达不到多线程的优势,那么它本身就会降低效率。
    4、是否使用多线程和同步,是个设计问题,它们之间不能互相取代,是需要根据具体的情况来分别设计的。
    总结一下就是,多线程,同步和单线程从根本上并无比较可能性,因为它们都是针对型设计,既然环境补贴,就没有比较。