JAVA 线程总结

不得不说,线程一直是我的软肋~~

所以捏~~发现了缺点就应该及时地补救(蔡依林的看我72变 ->再努力一点,把缺点变成优点害羞

好了类,不多说,进入正题。


1.什么是线程?

线程还被称为轻量级的进程,线程是程序执行流中的最小单元。那为什么 会有多线程这样的东东呢,试想啊,如果这从网上下载一首歌(假设启动了线程A),这个时候你还要和MM聊QQ(这时候 假设启动了线程B),如果没有多线程的存在,你的交互就会变成,要么先下完歌再聊天,要么聊了天后再下歌,亲还能得了不?呵呵。所以啊,这个多线程就是解决这样问题的东东咯。每个线程会轮询地换得时间片段执行(当然根据CPU的不同算法不一样咯),这样就让你一边聊天一边下歌咯


2.线程有哪些状态



3.JAVA实现线程的方式

实现Runnable或者是继承Thread(实际上Thread就是实现了Runnable  奋斗


4.经典例子讲解(传说中的生产者消费者问题吐舌头):

package com.mythread;

public class ProductExample {

	private int productCount = 0;

	/**
	 * 生产产品
	 */
	public synchronized void create() {
		productCount++;
		// 通知一个消费者,生产好了,注意是通知一个哦~~如果你用notifyAll把所有的都叫醒了,可就糟糕了!可以自己试试!
		notify();
		System.out.println("product count :" + productCount);
	}

	/**
	 * 消费产品
	 * 
	 * @throws InterruptedException
	 */
	public synchronized void get(int i) throws InterruptedException {

		if(productCount <= 0) {
			// 如果当前没有产品,则等着生产者唤醒
			wait();
		}

		productCount--;
		System.out.println("product count :" + productCount
				+ " get by customer" + i);
	}

	/**
	 * 生产者
	 */
	static class Creator extends Thread {

		private ProductExample pro;

		public Creator(ProductExample pro) {
			super();
			this.pro = pro;
		}

		@Override
		public void run() {
			pro.create();
		}

	}

	/**
	 * 消费者
	 */
	static class Customer extends Thread {
		private ProductExample pro;
		private int id;

		public Customer(ProductExample pro, int id) {
			super();
			this.pro = pro;
			this.id = id;
		}

		@Override
		public void run() {
			try {
				System.out.println("Customer " + id + " start!");
				pro.get(id);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}

	public static void main(String[] args) {
		ProductExample resource = new ProductExample();

		for (int i = 0; i < 200; i++) {
			Customer custormer = new Customer(resource, i);
			custormer.start();
		}

		for (int i = 0; i < 3; i++) {
			Creator creator = new Creator(resource);
			creator.start();
		}

	}

}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值