
thread
文章平均质量分 68
yakihappy
电信领域的计算机软件开发人
展开
-
死锁
程序中必须同时满足以下四个条件才会引发死锁:互斥(Mutual exclusion):线程所使用的资源中至少有一个是不能共享的,它在同一时刻只能由一个线程使用。 持有与等待(Hold and wait):至少有一个线程已经持有了资源,并且正在等待获取其他的线程所持有的资源。 非抢占式(No pre-emption):如果一个线程已经持有了某个资源,那么在这个线程释放这个资源之前,原创 2009-03-11 13:45:00 · 391 阅读 · 0 评论 -
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
Thread类 public Thread() 创建线程对象 public Thread(Runnable target)//target 称为被创建线程的目标对象,负责实现Runnable接口 Thread类有三个有关线程优先级的静态常量:MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY 新建线程将继承创建它的副相承的优先级,用户可以调用Thr原创 2009-03-11 13:46:00 · 2989 阅读 · 0 评论 -
同步和异步有何异同,阻塞与非阻塞,在什么情况下分别使用他们?举例说明
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。同步就是指:多个线程可以同时访问同一个资源。比如对一个变量而言,线程们可以同时对他原创 2009-03-11 13:46:00 · 1300 阅读 · 0 评论 -
Wait()与notify()
wait()->本线程进入等待队列,只能通过别的线程的notify()或notifyall()唤醒 notify()->随机地从等待队列删除一个线程,也就是说,该线程进入执行状态 notifyall()->删除所有在等待队列中的线程,按线程的优先级执行 不推荐使用notify():因为这是随机地从等待队列中取一个线程执行,我们不能通过设定优先级进行控制,如原创 2009-03-11 13:44:00 · 654 阅读 · 0 评论 -
区分interupt()和 notify().
isInterrupted()和interrputed()方法的区别isInterrupted方法是实例方法,interrupted方法是静态方法。Thread.currentThread().isInterrupted()Thread.interrupted()首先说明:wait(),notify(),notifyAll()这些方法由java.lang.Object 类提供原创 2009-03-11 13:44:00 · 503 阅读 · 0 评论 -
sleep()和yield()的区别
1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。public cl原创 2009-03-11 13:43:00 · 686 阅读 · 0 评论 -
sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。wait是Object类的原创 2009-03-11 13:43:00 · 2946 阅读 · 2 评论 -
stop() 和 suspend() 方法为何不推荐使用?
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,假如一个线程正在执行:synchronized void { x = 3; y = 4;} 由于方法是同步的,多个线程访问时总能保证x,y被同时赋值,而如果一个线程正在执行到x = 3;时,被调用了 stop()方法,即使在同步块中,它也干脆地s原创 2009-03-11 13:42:00 · 2442 阅读 · 0 评论 -
synchronized
每个对象只有一把监视锁(monitor lock),对于同步块,synchornized获取的是参数中的对象锁:synchornized(obj){ //............... }线程执行到这里时,首先要获取obj这个实例的锁,如果没有获取到线程只能等待.如果多个线程执行到这里,只能有一个线程获取obj的锁,然后执行{}中的语句,所以,obj对象的作用范围不同,控制原创 2009-03-11 13:41:00 · 769 阅读 · 0 评论 -
线程同步的方法
用什么关键字修饰同步方法 ? 用synchronized关键字修饰同步方法 同步有几种实现方法,都是什么?分别是synchronized,wait与notifywait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待原创 2009-03-11 13:41:00 · 11346 阅读 · 4 评论 -
启动一个线程是用run()还是start()?
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体。继承Thread类原创 2009-03-11 13:40:00 · 6381 阅读 · 4 评论 -
实现一个线程的方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口。继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。 实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。 这两种实现方式的区别并不大。继承Thread类的方式实现起来较为简单,但是继承它的类就不能再继承别的类了,因此也就不原创 2009-03-11 13:40:00 · 366 阅读 · 0 评论 -
线程与进程的区别
线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是和它所属的进程内的其他线程共享一个存储空间。线程的使用可以使我们能够并行地处理一些事情。线程通过并行的处理给用户带来更好的使用体验,比如你使用的邮件系统原创 2009-03-11 13:39:00 · 716 阅读 · 0 评论 -
线程的状态
Java中的线程有五种状态分别是:新建、就绪、运行、死亡、阻塞。1.新建状态:当利用new关键字创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配线程运行资源;对处于创建状态的线程可以进行两种操作:一是启动 (start)操作,使其进入可运行状态,二是终止(stop)操作,使其进入消亡状态。如果进入到消亡状态,那么,此后这个线程就不能进入其他状态,也就是说,它不再存在了。原创 2009-03-11 13:38:00 · 2068 阅读 · 0 评论 -
线程池
线程池就像数据库连接池一样,是一个对象池。所有的对象池都有一个共同的目的,那就是为了提高对象的使用率,从而达到提高程序效率的目的。比如对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程和销毁线程上耗费很大原创 2009-03-11 13:45:00 · 484 阅读 · 0 评论 -
怎么样做到线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。 在单线程运行的情况下,如果 Size = 0原创 2009-03-11 13:47:00 · 772 阅读 · 0 评论