Java多线程(一)基本用法

概念及优点

        进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。
        我们在Windows任务管理器的进程中看到的exe程序,这就是我们所说的进程。如QQ;
        线程:可以理解为进程中独立运行的子任务。比如QQ.exe运行时可以有好友视频线程,发送表情线程。
        多线程优点:可以在同一时间内运行更多的不同种类的任务。
         (1)使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;
         (2)当前没有进行处理的任务时可以将处理器时间让给其它任务;
         (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;
         (4)可以随时停止任务;
         (5)可以分别设置各个任务的优先级以优化性能。
       缺点:
         (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
         (2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。
         (3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。
         (4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

2、使用多线程

         1)继承Thread:Thread.java类中的start()方法通知“线程规划期”此线程已经准备就绪,等待调用线程对象的run()方法。其实就是让系统安排一个时间来调用Thread中的run方法,即使线程运行,启动,具有异步的执行的效果。线程顺序执行具有随机性。
            2)实现Runnable接口:由于java单继承性,所以对于已有父类的线程类就需要实现Runnable接口的类来实现多线程。
              如下方法中:              
      Thread(Runnable target);//分配Thread新对象
      Thread(Runnable target,String name);
      //代码示例
      Runnable runnable= new MyRunnable();
      Thread thread= new Thread(runnable);
      thread.start();
         同时Thread.java类也实现了Runnable接口
         3)实例变量与线程安全:不共享数据时,多个线程会独自运行数据;共享变量时:多个线程共享一个资源,会出现非线程安全问题。可以通过synchronized给对象或方法加锁(互斥区),来避免值被更改,值不同步的情况。

3、currentThread()方法

      返回代码段正在被那个线程调用的信息。如Thread.currentThread().getName();
      this与currentThread()的区别

4、isAlive()方法

      判断当前的线程是否出于活动状态。即线程已经启动且尚未终止。

5、sleep()方法

      指定毫秒内让当前“正在执行的线程”休眠。

6、getId()方法

      取得线程的唯一标识。

7、停止线程

      3种方法:1、退出标志,使线程正常退出,run()方法完成后线程终止。2、stop()强制终止线程,由于其安全性以及数据不同步等原因,作废。         3、使用interrupt()方法中断线程。
     其中,interrupt不可以立即终止线程;判断线程是否终止interrupted()(执行后具有将状态标识置清除)和isInterrupted()(不能清除状态标志);
      另外可以使用异常发终止状态,即用try...catch 拦截错误信息。(推荐使用,可以对异常信息进行相关的处理);
      在沉睡时终止:在sleep状态下停止某一线程,会进入catch语句,并且清除停止状态值。使之成为false;
      能停止的线程---暴力停止:stop()会抛出java.lang.ThreadDeath异常,同时释放锁导致数据不一致;
      return也可以停止线程,

8、暂停线程

      suspend与resume,该方法极易造成公共的同步对象的独占,,是其他线程无法访问公共同步对象;不同步性,由于现成的暂停使数据不能同步;

9、yield方法

       放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。

10、线程的优先级

        线程的优先级具有继承性,优先级高的线程得到的CPU资源较多,优先级高的线程先执行完。优先级具有随机性(针对于优先级比较接近的线程);优先级高的线程运行的快。

11、守护进程

       典型的守护进程------垃圾回收线程,当进程中没有非守护进程时,垃圾回收线程就不存在,自动销毁。
   以上是对多线程基础知识的学习与回顾。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值