java线程


1、概念

一、什么是进程?
进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的ie浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击桌面的ie浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。


二、什么是线程?
1、线程是轻量级的进程
2、线程是没有独立的地址空间(内存空间)
3、线程是由进程创建的(寄生在进程)
4、一个进程可以拥有多个线程(这就是我们常说的多线程编程)
5、线程有几种状态:新建状态(new)、就绪状态(runnable)、运行状态(running)、阻塞状态(blocked)、死亡状态(dead)

线程状态示意图:



三、在java中一个类要当作线程来使用有两种方法:
1、继承Thread类,并重写run函数
2、实现Runnable接口,并重写run函数
注意:不管是通过继承Thread,还是通过实现Runnable接口创建线程,它们的一个对象只能启动(既:start())一次,否则就会有异常抛出。


四、java线程的同步
在售票程序中同一张票可能被多个售票窗口出售的情况!
示例代码如下:
if(nums>0){
System.out.println("销售第"+nums+"张票");     //语句1
nums--;                           //语句2
}
假如:现在i=1,a线程刚刚执行完语句1正要执行语句2时,b线程执行if(nums>0)因为这时nums还是1,所以b线程将执行语句1,这样
就相当于1号票被卖出了两次,这样多并发就给我们带来了麻烦。

解决方案:
synchronized(Object){
//你要同步的代码
}
通俗解释:就好像有人在上厕所时先把门关上(上锁),其他的人先排队(在线程池),等上厕所的人完成后再把门打开(解锁),这时排队的人再依次去上厕所。


2、示例代码

package com.llb.jichu;

public class MyThread {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Lion lion = new Lion();
		// 启动线程
		// lion.start();
		// Tiger tiger = new Tiger();
		// Thread thread = new Thread(tiger);
		// thread.start();
		TicketWindow tw = new TicketWindow();
		Thread t1 = new Thread(tw);
		Thread t2 = new Thread(tw);
		Thread t3 = new Thread(tw);
		t1.start();
		t2.start();
		t3.start();
	}

}

class TicketWindow implements Runnable {
	private int nums = 100;

	public void run() {
		while (true) {
			synchronized (this) {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				if (nums > 0) {
					System.out.println(Thread.currentThread().getName() + "售出第"
							+ nums + "张票...");
					nums--;
				} else {
					System.out.println("票已售完,敬请关注!");
					break;
				}
			}
		}
	}
}

class Tiger implements Runnable {
	// 重写run方法
	public void run() {
		while (true) {
			// 休眠一秒,sleep后线程会进入blocked
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			System.out.println("implements Runnable");
		}
	}
}

class Lion extends Thread {
	// 重写run方法
	public void run() {
		while (true) {
			// 休眠一秒,sleep后线程会进入blocked
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			System.out.println("extends Thread!");
		}
	}
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值