篇一 :Java多线程总结

基本概念:

并发性和并行性:

并发性指的是同一时刻只能有一条指令执行,但是多个进程指令被快速轮换执行

并行性是指同一时刻,有多条指令在多个处理器上同时执行,使得在宏观上具有多个进程同时执行的结果

临界区:修改共享资源的代码区

1、线程实现有三种方式:

(1)类ThreadName(引用为a)继承Thread,然后调用a.start();

(2)类ThreadName(引用为b)实现接口Runnable,然后new Thread(b).start();

(3)类ThreadName(引用为c)实现接口Callable<Integer>,然后call方法作为执行体,会有返回值。

声明FutureTask<Integer> task = new FutureTask<Integer>(c);

Thead thread = new Thread(task).start();

一般采用实现接口的方式实现,有以下有优点:

使用实现Runnable接口和Callable接口的可以继续实现其他接口或继承

在这种方式下,多个线程可以共享一个target对象(共享线程类的实例属性),所以非常适合多个相同线程处理同一份资源的情况 实现Runnable和Callable的最大区别在于Callable是调用call方法,有返回值的

2、线程的生命周期:新建、就绪、运行、阻塞、死亡

线程在以下三种方式之一结束后就会处于死亡状态

(1)run()方法执行完成,线程正常结束

(2)线程抛出一个未捕获的Exception或Error

(3)直接调用该线程的stop()方法来结束该线程——该方法很容易导致对象受破坏,通常不推荐使用

3、线程的一些方法

join():等待另一线程执行完才执行

sleep():睡眠,不会释放对该同步监视器的锁定

…… …… 余下全文

篇二 :java多线程总结(含代码)

Java多线程总结

Java多线程总结

目标:

理解程序、线程和进程的概念

理解多线程的概念

掌握线程的各种状态

熟练使用Thread类、Runnable接口创建线程

熟练使用线程各种方法

1、程序、线程、进程

进程:调度和和独立运行的单位,使用了CPU

线程:是轻量级的进程,是进程的一个独立的连

2、线程的五种状态

新建:当一个

间没有占用CPU

CPU开始执行线程run()方法,子类必须重写run方法; 的使用权转让其他线程

run方法执行完毕时,线程进入死亡状态;

3

创建线程的两种方法:

(1)继承Thread类

(2)实现Runnable接口

继承Thread 类:

public class ThreadDemo extends Thread{

public void run(){

System.out.println(“Hello Java Thread”);

}

public static void main(String[] args){

Java多线程总结

new ThreadDemo().start();

}

}

实现Runnable接口

public class ThreadDemo implements Runnable{

public void run(){

System.out.println(“hello java Runnable”);

}

public static void main(String[] args){

new Thread(new ThreadDemo()).start();

}

}

4、线程的常用方法

设置线程名字:setName();

获取线程名字:getName();

主线程默认的名字可是:main

返回当前正在执行的线程:挂起线程:sleep();该方法要捕捉异常 Wait()后面详细讲解;

…… …… 余下全文

篇三 :Java多线程总结

Java多线程总结

线程的四种状态:

就绪Runable——运行中Running——阻塞Blocked——死亡Dead(结束)

线程的状态转换图

线程在一定条件下,状态会发生变化。线程变化的状态转换图如下:

1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。 线程的调度

1、调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会。 Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量: static int MAX_PRIORITY 线程可以具有的最高优先级,取值为10。 static int MIN_PRIORITY 线程可以具有的最低优先级,取值为1。 static int NORM_PRIORITY 分配给线程的默认优先级,取值为5。

…… …… 余下全文

篇四 :JAVA中实现多线程总结

我们知道,在操作系统级别上软件的运行一般都是以进程为单位,而在每个进程的运行过程中允许同时并发执行多个不同线程,这就使得一个程序能同时执行不同的操作。使用多线程的目的是为了最大限度地利用计算机CPU资源。JAVA程序字节码最终是在JVM虚拟机下运行的,同一虚拟机进程中的不同操作都是通过多线程来运行的。在JAVA虚拟机中,线程常用有单线程和多线程,单线程指程序执行过程只是一个有效操作的序列,不同操作都有着明确的先后顺序;而多线程允许同时进行着不同的操作,这些不同的操作同时并发进行着,并由CPU时钟频率根据不同的调度方式对他们进行执行调度。

在JAVA语言中提供了丰富的多线程操纵接口,提供了各类不同的线程实现方法供我们选择,功能非常强大。在手机软件设计中,由于同样需要执行网络连接(基于HTTP的高级Internet协议通讯)、UI调度等待、UI显示幻化、游戏控制等操作需要通过后台的数据运算或UI不断更新等操作。因此在J2ME中,KVM虚拟机也提供了功能强大的多线程API,使我们同样能在J2ME中实现线程的并发运算。

在J2ME中,主要有以下三种方法实现多线程。

一、继承Thread类(java.lang.Thread)

通过编写线程类继承Thread类并重写Thread类中的run()方法实现线程,当线程对象被运行时候将会自动执行run方法中的实体内容,从而开辟一个单独的线程并运行起来。

如:public class ThreadSimple extends Thread{

public ThreadSimple()

{

//constructor

}

public void run()

{

//run code entity

}

}

线程实例使用,直接创建对象并调用start()方法即可运行线程。

new ThreadSimple().start();

…… …… 余下全文

篇五 :Java多线程总结

多线程总结

在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java官网。

1.重写线程Thread,Runnable运行的是run方法,当调用线程start()时,会运行其run方法,

也可以主动去调用,只不过不在同一个线程里。

当一个线程既继承了Thread又继承Runnable,其thread必须调用target.run()实现对runnable的方法调用。

2.Object:的三种线程方法 wait() ,notify() ,notifyAll()

在某个线程里执行某个对象锁的wait方法会暂停该线程的运行,在另外一条线程里利用该锁的notify方法

可以唤醒某个该对象锁所在的线程;当该对象锁在多个线程里wait的时候,可以使用notifyAll唤醒运行。

3.线程调度-休眠/优先级/让步/合并/守护线程

休眠。静态方法Thread.sleep();谁调用谁休眠

对于优先级高的线程获取CPU机率比较大,并不一定优先级低的运行不了线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。Thread.yield()

线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 调用某个线程的join(),该线程运行完才运行调用它的线程代码。

守护线程的特征是当setDaemon(boolean on)将该线程标记为守护线程或用户线程。

当正在运行的线程都是守护线程时,Java 虚拟机退出。

该方法必须在启动线程前调用。实际上:JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态

4.线程的同步-同步方法/同步块

…… …… 余下全文

篇六 :C++多线程总结

C++线程总结

目录

1使用CreateThread函数生成的线程 ............................................................................................ 2

1.1CreateThread函数原型 ....................................................................................................... 2

1. 2 线程、线程句柄、线程ID的区别 ................................................................................. 3

1.2.1 线程与线程句柄的区别 ......................................................................................... 3

1.2.2 线程句柄与线程ID的区别 ................................................................................... 3

1.3 线程的管理和终止 ............................................................................................................ 4

1.3.1 线程的管理 ............................................................................................................. 4

…… …… 余下全文

篇七 :多线程编程知识总结

多线程编程

一、 问题的提出

1.1问题的引出

编写一个耗时的单线程程序:

新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:

void CSingleThreadDlg::OnSleepSixSecond()

{

Sleep(6000); //延时6秒

}

编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。

1.2多线程概述

进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。

多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,对于单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。 Win32 SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。

…… …… 余下全文

篇八 :Java多线程编程总结

Java线程:概念与原理

一、操作系统中线程和进程的概念


现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。


进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。

线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。

“同时”执行是人的感觉,在线程之间实际上轮换执行。

二、Java中的线程


在Java中,“线程”指两件不同的事情:
1、java.lang.Thread类的一个实例;

2、线程的执行。

使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。

一个Thread类实例只是一个对象,像Java中的任何其他对象一样,具有变量和方法,生死于堆上。

Java中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。

一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。

一旦创建一个新的线程,就产生一个新的调用栈。

线程总体分两类:用户线程和守候线程。


当所有用户线程执行完毕的时候,JVM自动关闭。但是守候线程却不独立于JVM,守候线程一般是由操作系统或者用户自己创建的

Java线程:创建与启动

一、定义线程

1、扩展java.lang.Thread类。

此类中有个run()方法,应该注意其用法:

public void run()

如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

Thread 的子类应该重写该方法。

…… …… 余下全文