线程浅析

1.进程与线程

一个进程包含多个线程。可以把进程当做一个应用程序。

操作系统分配一段时间给一个进程,让CPU执行该进程。进程再将时间片段分割给各个线程

2.创建线程(Thread)的方法

//方法一
Thread thread = new Thread(){
       @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();      //要写的代码
    }
};//创建Thread类,重写run方法
thread.start()  //开启线程
//方法二
public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NewThread nt = new NewThread();
        Thread thread = new Thread(nt);//将该类放入Thread类中
        thread.start();//启动线程
    }
}

class NewThread implements Runnable{//创建一个继承Runnable接口的类

    @Override
    public void run() {
        // TODO Auto-generated method stub
        //要写的代码
    }

}

注:所以说Thread类自身继承了Runnable();

3.线程的生命周期

图解

理解: 线程具有7种状态

出生:在Thread运用start()方法之前都算出生状态                                         就绪:当start()方法完成之后线程处于就绪状态(等待执行)

运行:操作系统分配时间,让线程进入cpu运行

产生阻塞的三种方法(也是三种状态):

等待:利用thread1.wait()线程自动进入阻塞状态。

一种设置时常:thread1.wait(1000);//当过了1000毫秒后自动处于就绪状态

另一种不设市场:只能够其他线程利用thread1.notify()唤醒,否则将一直处于阻塞状态。

睡眠:利用thread.sleep()进入睡眠状态。

必须设置时长,当时间过了自动进入就绪状态

阻塞:当线程处于等待I/O的输入输出方可再次运行时,处于阻塞状态。等到输入输出完毕时候自动进入就绪状态。

最后

线程运行完之后处于死亡状态

4.线程的优先级

优先级高的线程先运行,低的后运行。

thread.setPriority(int rank);//设置优先级

thread.yield()//让比自己高优先级的线程先运行

5.其他主要方法

//join()方法 Thread thread1 = new Thread(){
   public void run (){
        thread2.join();  //thread2调用了join方法
   }
};

Thread thread2 = new Thread(){
    public void run (){
        //
   }
}
//所以thread1要等待thread2执行完毕才能执行

6.线程同步

1.什么叫线程同步,为什么需要线程同步

当多个线程同时修改或调用同一个资源的时候,可能会导致数据不一致的情况,为了防止这种情况。就需要当一个线程使用资源的时候,另一个线程需要等待前一个线程使用完成。

2.线程锁

将资源对象锁住,防止其他线程使用。

//方法一
Thread thread = new Thread(){
       @Override
    public void run() {
        // TODO Auto-generated method stub
       super.run();
    synchronized(){
           //锁住资源对象
      }
    }
}
//方法二
Thread thread = new Thread(){
       @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        use();
    }

    private synchronized  void use(){
       //锁住资源对象
    }
}
//所以说synchronized是一个修饰符

7.小技巧

1.如何控制线程死亡:

boolean isDead = true;

Thread thread = new Thread(){
       @Override
    public void run() {
        // TODO Auto-generated method stub
       super.run();
       while(isDead){
          if (...){
             //...
          }
          else{
            isDead = false;
          }
       }
    }
}        
时间: 2024-08-06 20:06:57

线程浅析的相关文章

c# 线程浅析(代理 、Invoke、Lock)

前言:本来想根据自己的经验总结一下c#线程相关的知识点, 写之前看了一些其他人的博客,发现自己也就掌握了不到三分之一....希望通过这次的博客将自己的知识点补充一下,写出更直白的博客和初学者分享. 这是我参考的博客地址:http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html  . 这个是他参考的英文原著地址:http://www.albahari.com/threading/ 原博客介绍的可以说深入浅出,鞭辟入里.不过我想写

iOS线程浅析

一.线程概述 1. iOS里面的线程按种类可分为同步线程和异步线程.同步线程指调用同步线程的地方必须等到同步线程执行完毕才可以继续向下执行.而调用异步线程的地方则在执行完调用异步线程的语句后就可以继续向下执行. 2.线程按调用方式又可以大致分为以下几种类型:NSObject.NSThread.NSOperation和GCD.NSObject和NSThread只能管理单个的线程,功能较简单,GCD和NSOperation则可以进行队列等复杂操作,且效率较高.其中GCD方式最为有效,NSOperat

Android的线程浅析 补充

一.Looper的两点疑问 1) 问题一:Looper.loop()是处理消息,所有消息or部分消息? 2) 问题二:处理完消息后,结束or等待? Android官方示例文档代码:   class LooperThread extends Thread {       public Handler mHandler;       public void run() {           Looper.prepare();           mHandler = new Handler() {

进程与线程浅析(一)

首先,介绍一下两者的基本概念. 进程:1.程序或者说任务的执行过程.(动态性) 2.持有资源(共享内存,文件)和线程(是资源和线程的载体) 线程:1.线程是系统中最小的执行单元 2.同一个进程中可以有多个线程 3.线程共享进程的资源 综上,进程和线程的关系可以类比为班级和学生的关系,学生是组成该班级的最小单元,班级是学生的载体,学生可以利用该班级的资源,比如桌椅板凳等. 其次,介绍一下线程的交互. 线程之间的关系可以分为两种,互斥与同步. 互斥:即线程对相同的资源进行持有,则必须等前一个线程释放

进程与线程浅析(二)

今天主要介绍一下JAVA中,线程的使用. 首先,总结下java对线程的支持. 在JAVA中,对线程的支持主要体现在一个类(class)和一个接口(interfac)中. 即Thread类,和Runnable接口. 特点: a)两者皆继承于java.lang包. b)两者都有一个public void run()方法.提供线程实际工作的代码. 其次,介绍一下java中线程的创建和启动 a)线程的创建 Thread() Thread(String name) Thread(Runnable targ

进程与线程浅析(三)之线程三国战斗模拟

好久没有更新这个系列的文章了,那么书接前文.上一篇文章中已经说了小匹夫是做游戏开发的,光说不练假把式,下面的文章就利用java中的线程来做一个小小的模拟对战的演示好了. 既然是做游戏开发,游戏背景还是要有的,那么就选择三国题材吧. 既然是三国,那么就是乱世争天下咯,军队就是必不可少的. 小匹夫本人喜欢刘备,那么敌人自然就假设是曹操了. 这里我们使用Runnabel对象启动军队线程来模拟军队的战斗行为. //用来创建军队线程,模拟军队战斗 public class ArmyRunnable imp

Linux 线程浅析

进程和线程的区别与联系 在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体. 为了让进程完成一定的工作,进程必须至少包含一个线程. 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统.操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位. 线程存在与进程当中,是操作系统调度执行的最小单位.说通俗点

操作系统 进程与线程 浅析

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1.计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2.假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含义就是,单个CPU一次只能运行一个任务. 3.进程就好比工厂的车间,它代表CPU所能处理的单个任务.任一时刻,CPU总是运行一个进程,其他进程处

Java 线程浅析

一.什么是线程要理解什么线程,我么得先知道什么是进程.现代操作系统在运行一个程序时,会为其创建一个进程.例如启动eclipse.exe其实就是启动了win系统的一个进程.现代操作系统调度的最小单元就是线程,也叫轻量级进程,在一个进程里面包含多个线程,这些线程都有各自的计数器.堆栈等,并且能够共享内存变量.例如我们启动了一个eclipse进程,我们运行在其中的程序就可以理解为线程.二.为什么要使用线程(1)更多的处理器核心(可以运行更多的线程).(2)更快的响应时间(线程可以并行执行).(3)更好