java线程

来源:互联网 发布:如何禁止程序访问网络 编辑:程序博客网 时间:2024/04/30 08:11

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--);}}}}}


原创粉丝点击