Java多线程

相关概念:

程序:静态的概念,一组指令的集合。

进程:动态的概念,运行着的程序,是系统进行资源分配和调度的一个独立单位。

线程:动态的概念,线程是进程中的一条完整的执行的路径,线程是进程中的一条任务线。

举例:进程:火车站。进程:每一列行驶的火车都是进程。    进程:迅雷,进程:每一个下载任务都是进程。

Java提供了三种创建线程的方法:(简单示例)

继承Thread类。

package com.test.thread;

public class TestThread {
	
	public static void main(String[] args) {
		
		TickedThread thread1 = new TickedThread();//创建一个线程子类的线程对象
		thread1.setName("线程A");//给线程起名字
		thread1.start();//调用start启动线程
		
		TickedThread thread2 = new TickedThread();//创建一个线程子类的线程对象
		thread2.setName("线程B");//给线程起名字
		thread2.start();//调用start启动线程
		
		TickedThread thread3 = new TickedThread();//创建一个线程子类的线程对象
		thread3.setName("线程C");//给线程起名字
		thread3.start();//调用start启动线程
		
	}
	
}

class TickedThread extends Thread{
	//重写run方法
	@Override
	public void run() {
		for (int i = 0 ; i < 10 ; i++) {
			System.out.println(Thread.currentThread().getName()+" - - - - - "+i);
			
		}
	}
}

运行效果:

实现Runnable接口。

package com.test.thread;
/**
 * 实现runnable接口创建线程对象
 * @author YangLiangLiang
 *
 */
public class TestRunnable {
	
	public static void main(String[] args) {
		Thread thread1 = new Thread(new TickedRunnable());
		thread1.setName("runnableA");
		thread1.start();
		
		Thread thread2 = new Thread(new TickedRunnable());
		thread2.setName("runnableB---");
		thread2.start();
		
	}
	
}

class TickedRunnable implements Runnable{

	@Override
	public void run() {
		for (int i = 0 ; i < 10 ; i++) {
			System.out.println(Thread.currentThread().getName()+" - - - - - "+i);
		}
	}
	
}

运行效果:

实现Callable接口。(jdk1.5)

 

 

因为java有单继承的局限性,所以少用thread,多用runnable。

一个线程的生命周期:(图示)

 

线程常用方法:

(详情请查看对应版本API)

售票窗口---线程同步:(简单小栗子,无伪代码QAQ)

同步代码块:

package com.test.thread;

public class TestTicketThread {
	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		
		TicketSaler ts1 = new TicketSaler(ticket);
		ts1.setName("窗口A");
		TicketSaler ts2 = new TicketSaler(ticket);
		ts2.setName("窗口B");
		TicketSaler ts3 = new TicketSaler(ticket);
		ts3.setName("窗口C");
		TicketSaler ts4 = new TicketSaler(ticket);
		ts4.setName("窗口D");
		
		ts1.start();
		ts2.start();
		ts3.start();
		ts4.start();
		
	}
}


class Ticket{
	private int count = 10;
	public boolean sell(int count){
		synchronized (Ticket.class) {
			if (this.count>=count) {
				this.count-=count;
				System.out.println(Thread.currentThread().getName()+"卖出了"+count+"张票!余票"+this.count);
				return true;
			}
			System.out.println(Thread.currentThread().getName()+"出票失败!余票不足张票!余票"+this.count);
			return false;
		}
	}
}


class TicketSaler extends Thread{
	private Ticket ticket;
	
	public TicketSaler(Ticket ticket) {
		super();
		this.ticket = ticket;
	}

	@Override
	public void run() {
		boolean result = ticket.sell(1);
		while (result) {
			 result = ticket.sell(1);
		}
	}
	
}

同步方法:(emmm····)

class Ticket {
	private int count = 10;

	public synchronized boolean sell(int count) {
		if (this.count >= count) {
			this.count -= count;
			System.out.println(Thread.currentThread().getName() + "卖出了" + count + "张票!余票" + this.count);
			return true;
		}
		System.out.println(Thread.currentThread().getName() + "出票失败!余票不足张票!余票" + this.count);
		return false;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值