1.线程的创建:(两种方法)
1)继承Thread类,重写里面的run方法,将要运行的代码放在run方法中
2)实现Runnalble接口,实现里面的run方法,将线程要运行的程序放在run方法中,
创建Thread线程,将Runnable对象作为参数传递给Thread对象,调用Thread对象的start方法,使Runnable中的run方法运行:如:
package com.itcast.day10;
/**
* 创建一个类实现Runnable接口
* @author Yxx
*
*/
class Cyte implements Runnable{
private int i=100;
public void run() {
while(true){
if(i>0){
System.out.println(Thread.currentThread().getName()+"------"+i--);
}
}
}
}
/**
*
* @author Yxx
*
*/
public class ThreadDemo {
public static void main(String[] args) {
//创建一个Runable实例
Cyte c = new Cyte();
//创建线程将Runnable接口实例作为参数传给Thread构造函数
Thread t = new Thread(c);
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
Thread t3 = new Thread(c);
Thread t4 = new Thread(c);
//将线程启动
t.start();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
2.线程的几种状态
1.被创建:当用new关键字创建一个线程实例,但还没有调用start方法
2.运行:线程调度程序将处于就绪状态的线程置为当前线程时,线程为允许状态,开始执行run方法中的代码
3.就绪状态:当线程调用了start方法之后线程进入了就绪状态,等待着线程调度程序将线程置为当前线程,线程才会处于运行状态。
4.阻塞:当程序正在运行状态,调用了wait方法或者sleep方法时,程序处于阻塞状态,当程序调用notify方法时,程序才会被唤醒,但不一定马上进入运行状态,而是在就绪状态等待
5.死亡:当一个线程中的run方法里面的程序执行完成,或者调用了stop方法,程序就会处于死亡状态,对于已经死亡的线程,无法再调用start使他进入就绪状态
代码同步
对于多个线程访问同一个共享资源,有时候会出现数据共享的错误,原因就是因为cpu的调度不是人为能控制,当cpu在执行完if判断之后,当前线程处于阻塞状态,而cpu去执行其他权限更高的程序,cpu会在当前执行处记住一个地址,等cpu执行完其他程序,它就会更据那个地址继续向前执行,在执行过程中可能i的值已经到了1,而现在又不用判断,所以就出现了0,-1的现象
3.代码同步
对于多个线程访问同一个共享资源,有时候会出现数据共享的错误,原因就是因为cpu的调度不是人为能控制,当cpu在执行完if判断之后,当前线程处于阻塞状态,而cpu去执行其他权限更高的程序,cpu会在当前执行处记住一个地址,等cpu执行完其他程序,它就会更据那个地址继续向前执行,在执行过程中可能i的值已经到了1,而现在又不用判断,所以就出现了0,-1的现象
class Cyte implements Runnable{
private int i=100;
public void run() {
while(true){
if(i>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println(Thread.currentThread().getName()+"------"+i--);
}
}
}
}
如果需要对操作共享资源的代码块添加代码同步。如:
class Cyte implements Runnable{
private int i=100;
Object o = new Object();
public void run() {
while(true){
synchronized (o) {
if(i>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"------"+i--);
}
}
}
}
}
- 大小: 32.8 KB
- 大小: 27.6 KB
分享到:
相关推荐
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...
Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解
java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...
Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程
分析java线程日志的工具,使用jstack把java线程日志dump下来,然后上传到该工具,就可以查看线程阻塞情况等信息。
4种常用Java线程锁的特点,性能比较、使用场景 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发...
Java线程模块Java线程之秒表新手学习Java线程模块时,利用Java中设置线程的暂停间隔,做的简易秒表
java线程.pdf java 学习java
java线程 线程 教程 java线程教程 java线程学习资料 本教程有什么内容? 本教程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用...
Java线程状态流转图
Java线程Java线程Java线程Java线程Java线程Java线程
有点乐趣,小java线程监控程序, 小java线程监控程序 小java线程监控程序
Java线程.pdf
Java线程使用教程
Java线程pdf帮助文档
java线程深入讲解,可以了解java线程同步语安全,实现的方法和synchronized锁的使用与安全控制等等,谁用谁知道好用
Java 线程通信示例 源代码 多线程之间通信,值得收藏
Java 线程的学习和使用Java 线程的学习和使用
这是一个关于Java线程的ppt文件,燕山大学信息学院计算机系 李 峰
java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程