`
SpringWillComing
  • 浏览: 4413 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

初学线程的知识要点

阅读更多

 

一、基本概念

1.程序:一系列可执行程序的集合

2.进程Process :简单来说就是一个程序在给定的活动空间和

初始条件,在一个处理机上的执行过程。可以简单的理解为

进程就是一个在运行的程序,它是由一个或多个线程组成。

3.线程 Thread:一个线程是一个程序内部的一个顺序控制流。

即:一个或多个线程组成一个进程。

*进程与线程的关系:

一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己独有的栈空间,但代码区是共享的,即不同的线程可以执行同样的函数。

4.Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。每个 Java 程序都至少有一个线程-主线程。 

主线程的重要性体现在两个方面: 

a.它是产生其他子线程的线程。

b.通常它必须最后完成执行,因为它执行各种关闭动作。

二、线程生命周期

1.新建(New Thread):当一个Thread类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源

2.就绪(Runnable):处于新建状态的线程被启动后,将进入线程队列排队,这个时候具备了运行的条件,一旦轮到CPU的时候,就可以脱离创建它的主线程独立开始自己的生命周期.

3.运行(Running):就绪的线程被调度进入运行状态,每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行的时候,它将自动调用本对象的run()方法,从第一句代码开始执行。所以说对线程的操作应该写到run()方法中

4.阻塞(Not Runnable)(中断):一个正在执行的线程如果再某种情况下不能执行了.进入阻塞状态,这个时候它不能进入排队状态,只有引起了阻塞的原因消失的时候,线程才可以继续进入排队状态等待CUP处理。

5.死亡(Dead):处于死亡状态的线程不具有继续执行的能力,线程死亡主要的原因是正常运行的线程完成了全部工作,即执行完了run()方法,另外就是被提前强制的终止了。

<!--[if !supportLists]-->三、<!--[endif]-->创建线程方法

1、要想创建线程,最简单的办法就是继承java.lang.Thread

要触发一个新线程,使用 start() 方法,

    如:Mythread t = new Mythread();

           t.start();

2、声明一个实现 Runnable 接口的类,并实现 run() 方法。 

    class B implements Runnable{

           public void run( ) {/* 实现该方法*/ }

}

B b = new Thread(new B());

b.start();

3、通过定时任务调用 定义一个定时任务项  (继承TimeTask)

例如:class C extends TimerTask{

public void run(){

}

}

C c = new C();

Timer t = new Timer();

t.schedule(c,1000,2000); 

 

程的通讯

要做到协调多个线程对共享数据的存取这一点,关键是要让线程能相互“协商”。而这个任务要由Object的wait( )和notify( )来完成。这个方法仅在 synchronized 方法中才能被调用。

wait()让把线程挂了起来,notify()和notifyall()激活某个等待线程,其实就是撤销该线程的阻塞状态,从而使他们有机会再次运行

生产/消费 模型:可以使用synchronizedwait( )和notify( )来完成。也可以使用阻塞队列java.util.concurrent.LinkedBlockingDequeput(),take()方法。

 

<!--[if !supportLists]-->五、<!--[endif]-->线程的同步

永远也不会知道线程会在什么时候启动 ,你必须要有办法能防止两个线程同时访问同一个资源。要防止这种冲突很简单,只要在线程运行的时候给资源上锁就行了。第一个访问这个资源的线程给它上锁,在它解锁之前,其它线程都不能访问这个资源,接着另一个线程给这个资源上锁然后再使用,如此循环。由于锁定语句会产生"互斥(mutual exclusion)"的效果,因此这一机制通常也被称为mutex。Java提供了内置的防止资源冲突的解决方案,这就是synchronized关键词。synchronized并不是保护数据不被访问,只是保证同一时刻只有线程在运行有了synchronized,多线程程序才变得可以控制。当一个线程访问对象的一个synchronized同步代码块时,它就获得了该对象的对象锁。结果,其它线程对该对象所有同步代码部分的访问都被暂时阻塞。 

锁的方式:

1、锁住代码块

synchronized(需要同步的对象){

需要同步代码

}

2、锁住方法体

public synchronized void quqian(int n){

}

3、使用锁对象

Lock l =new ReentrantLock;

l.lock();

//同步代码块

l.unlock();

六、线程的暂停和停止模型

static boolean isPause = false;// 是否暂停

boolean isStop = false;// 是否停止

public void run() {

while (!isStop) {

if (!isPause) {

//需要在线程中执行的代码

//...

}

try {

Thread.sleep(10);

} catch (Exception e) {

e.printStackTrace();

}

}

}

 

 

七、线程安全问题

如果对共享数据都是只读操作,则线程安全的。当对共享数据同时进行读写操作如果时采取了同步措施,调用者不需要考虑数据同步问题,则线程安全的。其他情况则不是线程安全的

 

 

 

 

 

分享到:
评论

相关推荐

    Java程序设计习题集下载

     简洁性:每道习题者晖力求典型而简洁,这样既方便初学者,也有利于提高学习效率,在较短的时间内测试并领会较多的知识要点。 作者简介 雍俊海1991年到2000年就读于清华大学计算机科学与技术系,获学士。硕士和...

    Java基础面试题pdf

    无论你是刚入门的初学者还是有一定经验的开发人员,这份资源都能帮助你巩固基础知识、拓宽视野,并提升解决问题的能力。 在这份资源中,你将找到涵盖了Java语言的核心概念、面向对象编程、异常处理、集合框架、多...

    《JAVA语言》西安交大在线作业参考资料.docx

    内容概要包括基本语法、异常处理、线程模型和并发编程概念等核心要点。 适用人群主要是学习JAVA语言的大学生或者初学者,特别是西安交通大学的学生,因为这是为他们提供的在线作业参考材料。 使用场景及目标主要是...

    C#5.0语法范例

    内容上包括程序基础、基本运算符、语句、类型转换、类、多态、命名空间、接口、访问性约束、泛型、异常、反射、特性以及多线程等内容。在内容的安排上进行了仔细部署,按照由浅入深的方式循序进行讲解。比较照顾初学...

    C#4.0权威指南.pd

    内容全面,不仅重点讲解了C# 4.0的所有新特性,而且对C#的所有知识点的原理、用法和要点都进行了全面的讲解和深度的分析,广度和深度完美结合。《C# 4.0权威指南》注重实践,包含大量有价值的示例代码,可操作性极强...

    JAVA面向对象编程(孙卫琴).part05

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    Java面向对象编程.zip

    全书内容包括面向对象的编程思想、java语言的基础知识、异常处理、类与对象的生命周期、多线程、java集合、输入/输出和gui编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、java语言的语法、java虚拟机...

    JAVA面向对象编程(孙卫琴).part01

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part02

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part03

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part04

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part10

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part07

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part06

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part11

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part08

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    JAVA面向对象编程(孙卫琴).part09

    全书内容包括面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机...

    java后端面试题答案

    无论你是刚入门的初学者还是有一定经验的开发人员,这份资源都能帮助你巩固基础知识、拓宽视野,并提升解决问题的能力。 资源中的面试题目涵盖了Java语言基础、面向对象编程、数据结构与算法、多线程与并发、网络...

    Java语言最新实用案例

    很实用的小案例,非常多,也很简单,很适合初学者,而且以网页的形式展现,使用非常方便。 共7章: 第1章 Java语言基础 ...每个案例有:案例简介 案例目的 运行界面 技术要点 代码分析 应用扩展 相关知识

    C++ Builder_5 编程实例与技巧(源代码)

    在每章的前面部分,以一定的篇幅对基本理论、知识要点等进行论述;然后以经典的例程加以说明;最后对例程进行分析和总结。书中的例程完整,并全部按照章号进行了编号。在随书的光盘中有这些例程的源代码和编译、链接...

Global site tag (gtag.js) - Google Analytics