为了账号安全,请及时绑定邮箱和手机立即绑定
  • @Java线程——线程交互——争用条件 1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件 2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。 3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况
    查看全部
  • 建议: 1、Java Memory Mode:JMM描述了java线程如何通过内存进行交互,了解happens-before,synchronized,voliatile & final 2、Locks % Condition:锁机制和等待条件的高层实现 java.util,concurrent.locks 3、线程安全性:原子性与可见性,死锁等 4、多线程常用的交互模型 · Producer-Consumer模型 · Read-Write Lock模型 · Future模型 · Worker Thread模型 5、Java5中并发编程工具:java.util.concurrent 线程池ExcutorService Callable&Future BlockingQueue 6、推荐书本:CoreJava & JavaConcurrency In Practice
    查看全部
    4 采集 收起 来源:总结及展望

    2018-03-22

  • 同步是两个线程之间的一种交互的操作(一个线程发出消息另外一个线程响应)。 同步的实现:wait();notify();notifyAll();这三个方法都是属于Java中的Object对象的成员函数。 调用wait();和notifyAll();方法使线程进入等待或者唤醒不是在同一个线程的同一次操作中执行的,当操作结束,唤醒了所有的等待线程之后,线程又将有着公平的机会竞争CPU资源。 注意:notify();方法唤醒wait set 中的一条线程使其具有竞争CPU的机会,具体唤醒那一条线程是随机的由Java的底层算法决定,我们不能去控制。 通过synchronized关键字为临界区(critical)加锁,这样在线程竞争资源时,当某一条线程获得锁进入临界区后,其他线程将无法再次获取锁进入临界区(critical),直到获得锁的线程退出临界区(critical),释放锁资源。Java的语法保证了同一时间只能有一条线程可以获得lockObject。
    查看全部
  • 线程常用方法

    1.获取线程名称:getName();
    2.取得当前线程对象:currentThread();
    3.判断是否启动:isAlive();
    4.强行运行:join();
    5.线程休眠:sleep();
    6.线程礼让:yield();

    线程停止:
    1、调用stop()方法会使线程戛然停止,而无法知道线程任务完成情况,官方已经不推荐使用。
    2、interrupt()方法设置线程的标识位,并在线程中判断标志位的状态,从而结束线程,但是当在线程中开启了另外的线程时,比如在线程中Tread.sleep(),这时候调用interrupt()方法设置标志位可能设置的是你想要停止的线程,也可能是想要停止的线程中的线程的标志位,因此interrupt()方法也并不能很好的结束线程。
    3、第三种方法,在线程的类声明一个volatile变量来记录线程的状态,相当于interrupt()方法那样,volatile关键字表示线程中的变量可以接受外部其他线程改变。因此可以在需要停止的地方设置volatile声明的变量的值设置为状态,并在执行run()函数里判断是否结束。
    什么时候使用thread 什么时候使用runnable
    其实两种方式效果一样,但推荐使用runnable
    因为Java是单继承,继承了thread就不能继承其他的类
    而实现runnable接口的话,扩展性要好很多


    查看全部
  • volatile 关键字 保证了线程可以正确地读取其他线程写入的值,如果不写成volatile,由于可见性的问题,当前线程有可能不能读到这个值//可见性JMM(JAVA内存模型)happens-before原则、可见性原则 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的值 Thread.yield();//让出处理器时间,公平竞争
    查看全部
  • 每一个java文件中只能有一个public类 两种方法实现线程: 1、继承 Thread 类 class MyThread extends Thread{}; Thread myThread = new MyThread(); myThread.start(); 2、实现Runnable接口 class MyRunnable implements Runnable{} Thread myRunnable = new Thread(new MyRunnable); myRunnable.start(); 3、Thread启动后执行run()方法 4、若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程。 Thread类的方法: .getName() 返回线程的名字 .setName(String Name) 改变线程的名字 .start() 使该线程开始执行,Java 虚拟机调用该线程的 run 方法。 .sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。线程不丢失任何监视器的所属权。 .currentThreat() 返回对当前正在执行的线程对象的引用。(静态方法,返回Thread类型)
    查看全部
  • 通过线程的方法来控制线程 start()开始线程。 sleep()方法可以使线程休眠。 yield()让出当前线程的执行权限,随机选择线程执行。 join()优先执行该线程,其他线程都暂停。
    查看全部
  • Thread常用方法 sleep(long millis, int nanos) 线程休眠 millis休眠的时间,单位是毫秒,可以精确到纳秒 join(long millis, int nanos) 调用线程 可以让其它线程等待自己运行,直到结束 static void yield() 当前运行线程释放处理器资源并且重新去竞争处理器资源 static Thread currentThread() 返回当前正在处理器上运行的线程的引用 重载的几个形式 1.没有参数,指明了其它的线程一定要等待正在执行的线程执行完毕之后,都会获得运行的机会 2.nanos是要把精确度改变,可改成纳秒
    查看全部
  • @Java线程——如何正确停止线程 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作
    查看全部
  • java对线程的支持体现在两个:class thread 和interface Runnable class thread 和interface Runnable均寄生于java.lang的包 class thread 和interface Runnable共通的方法是:public void run()为我们提供线程实际工作执行的代码 线程中常用的方法: 1.线程的创建: Thread() Thread(String name) Thread(Runnable target) Thread(Runnable target,String name) 2.线程的方法: 启动线程 : void start() 线程休眠 : static void sleep(long millis) static void sleep(long millis,int nanos)//时间可以精确到纳秒 使其他线程等待当前线程终止: void join()//指明其他其他线程必须等待当前结束后才能运行 void join(long millis)//参数表示其他线程最长等待的时间 void join(long millis,int nanos) 当前运行线程释放处理器资源 static void yield() 3.获取线程引用 返回当前运行的线程的引用 static Thread currentThread()
    查看全部
  • 使用到的函数 创建一个线程 Thread actor = new Actor(); static void Threa.start();//启动一个线程 static void Threa.sleep();//休眠一个线程 某个线程从Thread继承来的 thread.getName(); // 获取线程的名字 使用Runnable方法创建的线程 class Actress implements Runnable { } 创建一个这样的线程 Thread actressThread = new Thread(new Actress(), "MS.Runnable") Thread.yield(); //释放处理器 vlatile 关键字,保证了线程可以正确的读取其他线程写入的值 百度百科volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile关键字具体可以参见 JMM的介绍 eclipse的使用技巧 直接写一个变量,写完之后 ctrl+1选择创建之
    查看全部
  • 线程停止: 1、调用stop()方法会使线程戛然停止,而无法知道线程任务完成情况,官方已经不推荐使用。 2、interrupt()方法设置线程的标识位,并在线程中判断标志位的状态,从而结束线程,但是当在线程中开启了另外的线程时,比如在线程中Tread.sleep(),这时候调用interrupt()方法设置标志位可能设置的是你想要停止的线程,也可能是想要停止的线程中的线程的标志位,因此interrupt()方法也并不能很好的结束线程。 3、第三种方法,在线程的类声明一个volatile变量来记录线程的状态,相当于interrupt()方法那样,volatile关键字表示线程中的变量可以接受外部其他线程改变。因此可以在需要停止的地方设置volatile声明的变量的值设置为状态,并在执行run()函数里判断是否结束。
    查看全部
  • 每一个java文件中只能有一个public类 两种方法实现线程: 1、继承 Thread 类 class MyThread extends Thread{}; Thread myThread = new MyThread(); myThread.start(); 2、实现Runnable类 class MyRunnable implements Runnable{} Thread myRunnable = new Thread(new MyRunnable); myRunnable.start(); 3、Thread启动后执行run()方法 4、若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程。
    查看全部
  • 线程是进程的最小执行单元,进程由无数的线程组成,线程的交互,互斥和同步,互斥是当一个线程正在运行时,其他的线程只能等待,当完成后就可以运行了。同步是两个或多个线程同时进行运行。



    查看全部
  • 1.Runnable只是一个接口,它里面只有一个run()方法,没有start()方法, 所以,即使实现了Runnable接口,那也无法启动线程,必须依托其他类。 而Thread类,有一个构造方法,参数是Runnable对象,也就是说可以通过Thread类来启动Runnable实现的多线程。
    查看全部

举报

0/150
提交
取消
课程须知
本课程的学习,需要小伙伴们具有面向对象基础知识及 Java 语言基础。如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、Java 中如何使用线程 2、什么是争用条件 3、线程如何交互

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!