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

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/expiator/p/5544267.html
Copyright © 2011-2022 走看看