java线程

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.线程的几种状态

[img]http://dl.iteye.com/upload/attachment/0070/0004/11cbdfc6-e4d9-3851-b3fd-6e7ca1d42cdd.jpg[/img]
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--);
}
}
}
}


[img]http://dl.iteye.com/upload/attachment/0070/0031/eacc346a-5320-390b-a3dc-86ff60491b51.jpg[/img]
如果需要对操作共享资源的代码块添加代码同步。如:
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--);
}
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值