多线程的细节

-------------------------------------

1,sleep,wait区别

相同点:可以让线程处于冻结状态。
            不同点:
            1,
            sleep必须指定时间。
            wait可以指定时间,也可以不指定时间。
            2,
            sleep时间到,线程处于临时阻塞或者运行。
            wait如果没有时间,必须要通过notify或者notifyAll唤醒。
            3,
            sleep不一定非要定义在同步中。
            wait必须定义在同步中。
            4,
            都定义在同步中,
            线程执行到sleep,不会释放锁。
            线程执行到wait,会释放锁.

    总结:小朋友抓人,sleep会自己醒,而wait需要别人叫你.线程要有拿到锁和有执行权时才能运行,在第四点中wait和sleep都会释放执行权,

-------------------------------------

2,停止线程-定义标记

  思想:通过标记控制循环就可以了,把标记加入条件语句中可以用while(flag),通过改变标记的状态.代码如下

//演示停止线程-定义标记。
class Demo implements Runnable
{
    private boolean flag = true;
    public synchronized void run()
    {
        while(flag)
        {
              System.out.println(Thread.currentThread().getName()+"----->");
                         }
      }
    //对标记的修改方法。
    public void changeFlag()
    {
        flag = false;
    }
}
class StopThreadDemo
{
    public static void main(String[] args)
    {
             Demo d = new Demo();
             Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
                 t1.start();
                 t2.start();
                int x = 0;
        while(true)
        {
            if(++x == 50)//条件满足。
            {
                            d.changeFlag();//改变标记,让其他线程停止
                               break;//调出循环,让主线程停止

                                   }
                  }
          }
}

-------------------------------------

3,停止线程-interrupt方法

  出现问题:如果线程处于冻结状态,就无法判断标记,就无法结束。

  分析问题:这时就需要通过结束线程的冻结状态让其恢复到运行状态。

  解决问题:可以通过Thread类中的interrupt方法解决这个问题.

  注意:该方法会使线程出现InterruptedException异常,要做出处理方式。

  

时间: 2024-12-28 18:58:18

多线程的细节的相关文章

java中的多线程入门

本文主要是想学习下java中多线程的东西. 一.理解多线程. 多线程是怎么样的机制?他是允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此之间相互独立. 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,有操作系统负责调度,区别在于线程诶有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单. 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”,如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速

《day16_多线程细节_Eclipse使用》

1 多线程的一些细节: 2 1,面试题:sleep方法和wait方法异同点是什么? 3 相同点:可以让线程处于冻结状态. 4 不同点: 5 1, 6 sleep必须指定时间. 7 wait可以指定时间,也可以不指定时间. 8 2, 9 sleep是时间到,线程处于临时阻塞或者运行. 10 wait如果没有指定时间,必须要通过notify或者notifyAll唤醒. 11 3, 12 sleep不一定非要定义在同步中,而wait必须要定义在同步中. 13 4, 14 都定义在同步中, 15 线程执

多线程执行一些细节

停止线程-----------1.定义循环结束标记 .因为线程运行代码一般都是循环,只要控制了循环即可 2.使用interrupt(中断)方法.该方法是结束线程的冻结状态,使线程回到运行状态中来 注:stop方法已经过时不再使用 创建线程方式--------------------1.Thread2.Runnable{public void run();} 例子:class Man extends Person implements Runnable{ //Man虽然具备有执行功能了,但它不是线

Java之旅--关于多线程

关于多线程的知识,有非常多的资料可以参考.这里稍微总结一下,以求加深记忆. 关于多线程在日常工作中的使用:对于大多数的日常应用系统,比如各种管理系统,可能根本不需要深入了解,仅仅知道Thread/Runnable就够了:如果是需要很多计算任务的系统,比如推荐系统中各种中间数据的计算,对多线程的使用就较为频繁,也需要进行一下稍微深入的研究. ThreadLocal与synchronized 区别ThreadLocal 与 synchronized ThreadLocal是一个线程隔离(或者说是线程

从JAVA多线程理解到集群分布式和网络设计的浅析

对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些常用的,在后续文章中如果有必要再说明更加复杂的吧,本文主要说明多线程的一下几个内容: 1.在应用开发中什么时候选择多线程? 2.多线程应该注意些什么? 3.状态转换控制,如何解决死锁? 4.如何设计一个具有可扩展性的多线程处理器? 5.多线程联想:在多主机下的扩展-集群? 6.WEB应用的多线程以及

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

多线程的秘密

一.线程的定义  1. 1 进程.应用程序域与线程的关系 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界. 应用程序域(AppDomain)是一个程序运行的逻辑区域,它可以视为一个轻量级的进程,.NET的程序集正是在应用程序域中运行的

多线程(Thread,Runnable)

一.多线程. 1.进程:一个正在执行的程序叫做进程. 每一个进程的执行都有一个执行顺序,这个顺序就是一个执行的路径,或者叫做一个控制单元. 2.线程:就是上述进程中的一个独立控制单元, 线程在控制着进程的执行. 一个进程至少有一个线程. Java virtual machine 启动时会有一个进程 Java.exe, 该进程中至少有一个进程负责Java程序的执行, 而此进程运行的代码存在于 main方法中. 而该线程称之为主线程. 扩展:在更细节的说明jvm, jvm启动的时候不止主函数一个线程

[转]C#综合揭秘——细说多线程(上)

C#综合揭秘——细说多线程(上) 引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽可能地减少IIS的压力.并行编程