zoukankan      html  css  js  c++  java
  • java多线程与并发笔记

    0.多线程,主要用来提高程序效率,处理耗时的操作。

    多个线程写在同一个类里调用,并不是说写在前面的线程就会先运行。各个线程会进行争抢,能抢到系统资源的才会先运行。

    因此,同一个程序,多个线程运行,可能每次运行的结果都不一样。

    1.线程安全指的是,主要是指多线程操作同一个数据时,防止脏数据的产生,避免数据紊乱。
    线程安全的情况:就是当一个线程需要对这个数据进行改写时,会给这个数据上一个同步锁,比如A线程拿到数据后,
    给数据加上同步锁,这时候B线程进来了,但是这时候数据已经上锁,B线程则需要等待A线程释放锁之后才能对数据
    进行操作,这样就防止了脏数据的产生。
    StringBuffer是线程安全的。
    2.线程并发,不是物理上的同时发生,而逻辑上的同时发生。
    3.同步,异步是什么?
    线程同步:多个线程同时访问同一资源,要等当前的线程执行结束,才能执行下一个线程。耗时久,效率低,线程安全。
    线程异步:访问资源时,当前线程在执行时,其他的线程也可以执行。
    同步的应用:

    比如两个人同时在一个银行账户上取钱,卡上共500块,如果不加上同步锁,那么这两个人都能取出500块,共1000块,这明显是不合理的

    另外,在java的IO源码中,大量应用了"同步"。如果文件在写入时,不进行线程同步,那么多个人操作同一个文件,会导致数据紊乱。

    异步的应用:

    比如下载资源耗时比较久,其他线程不用干等着,可以做其他事情,不会因此而耽误。
    4.synchronized。
    由于同一线程的多个线程共享同一片存储空间,可能会有访问冲突。可以用synchronized这个关键字,
    避免同一个数据对象被多个线程同时访问。
    synchronized有两种用法:
    a、synchronized方法:在方法声明中加入synchronized,可以控制对类成员变量的访问。
    b、synchronized块:通过synchronized关键字来声明synchronized块。
    5.进程是操作系统的单位,线程是Cpu调度的单位。一个进程可以有多个线程。
    6.java线程有6种状态:新建线程new,启动线程runnable,阻塞block,计时等待timed_waiting,等待线程waiting,终止线程terminated
    7.Thread.yield( )方法:让所有的线程重新争抢执行权。
    8.wait和sleep的区别在哪里?调用sleep方法的线程不释放锁,但调用wait方法的线程释放锁。
    9.Thread.join()方法:存在一个线程A,现在插入线程B,要求B先执行完毕,然后再继续执行线程A。

    其实就相当于日常生活中的插队。。
    10.线程同步:多线程中,可能会发生线程抢占资源的问题。为了防止冲突,java提供线程同步的机制保证线程安全。
    11.实现Runnable接口
    public class ThreadTest implements Runnable{
      ...
       public void run() {}
    }

    ThreadTest t=new ThreadTest();
    Thread t1=new Thread(t);     //为什么要用对象实例化来新建线程呢?直接使用t不好吗?
                                  //runnable里面,没有start方法,所以必须把对象放到Thread线程里。

    }

    12.
    串行、并行:
    指的是任务的执行方式。
    串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。
    并行指的是多个任务可以同时执行。
    异步是多个任务并行的前提条件。

  • 相关阅读:
    Nagios经check_http监视web申请书server多个tomcat维修
    一个测试SQL2005数据库连接JSP档
    android 36 线程通信
    android 35 ListView增删改差
    android 34 ListView进阶
    android 33 对话框控件
    android 32 Gallery:横着滚动的列表
    android 31 GridView
    android 30 下拉列表框:ArrayAdapter和Spinner.
    android 29 ArrarAdapter数组适配器
  • 原文地址:https://www.cnblogs.com/expiator/p/5544267.html
Copyright © 2011-2022 走看看