java多线程入门(一)

–参考链接—博主:Kilnn –https://blog.csdn.net/LonelyRoamer/article/details/7948329

进程:运行中的应用程序称为进程拥有系统资源(cpu,内存)
线程:进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程额资源)
在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程

==java中创建一个线程的两种方式:
1.继承Thread类,重写run()方法,然后直接new这个对象的实例,创建一个线程的实例。然后调用start()方法启动线程
2.实现Runnable接口,重写run()方法,然后调用new Thread(runnable)的方式创建一个线程,然后调用start()方法启动线程

其实看thread的源文件,发现它也是实现了Runnable接口的。

接下来关于线程的生命周期和状态控制可以看这篇文章
https://blog.csdn.net/LonelyRoamer/article/details/7949969
新建-------start()---------就绪
就绪--------获得处理器资源---------运行
运行-------失去处理器资源(调用yield()方法)--------就绪
运行-------调用stop() 的story()方法或者run()方法执行完成----死亡

运行----sleep,IO阻塞等待同步锁等待通知suspend-----阻塞------sleep时间到/IO方法返回/获得同步锁/收到通知resume------就绪

对于线程同步有以下几点
如果存在多个程序同时对同一个数据进行访问,那么就会有很多奇奇怪怪的操作
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突的问题
问题1:取钱问题

package com.tao.test;
public class GetMoneyTest{
	public static void main(String[] args){
		Account account = new Account(5000);
		GetMoneyRun runnable = new GetMonryRun(account);
		new Thread(runnable,"你“).start();
		new Thread(runnable,"你老婆).start();
		}
	}
	//账户Mode
	class Acount{
		private int money;
		public Account(int money){
			super();
			this.money = money;
			}
			public int getMoney(){
				return money;
				}
			public void setMoney(int money){
				this.monry = money;
				}
		}
		//runnable类
		class GetmoneyRun implements Runnable{
			prinvate Account account;
public Getmoney Run(Account account){
		this.account = account;
		}
		@Override
		public void run(){
			if(account.getMoney() >3000){
				

所以为了避免两个线程不干扰我们就要保证线程同步互坼,所谓同步互坼就是:并发执行的多个线程在某一个时间内只允许一个线程在执行以访问共享数据。
所以我们就引入了同步互坼锁的概念
1.同步锁:java中每个对象都有一个内置的同步锁,Java中可以使用synchronized关键字来取得一个对象的同步锁。使用方式就是在一段代码中加入synchronized(object){…}

//l例如有一个show方法里面有synchronized的代码段:
publicvoid show(){
	synchronized(object){
		..........
		}
	}
	//这其中的object可以使任何对象,表示当前线程对象取得该对象的锁。一个对象只有一个锁,所以其他任何线程都不能访问该对象的所有有Synchronized包括的代码段,直到该线程释放掉这个对象的同步锁(释放锁是指待线程锁退出synchronized同步方法或代码块)
	使用方式
	1.取得同步锁的对象为this,即当前类对象,这是使用的最多的一种方式
	public void show(){
		synchronized(this){
			.....
			}
		}
	2.将synchronized加到方法上这叫做同步方法,相当于第一种方式的缩写
	public synchronized void show(){
	}
	3.静态方法的同步
	**使用synchronized关键字要注意到:
	1)只能同步方法和代码块,而不能同步变量和类
	2)每个对象只有一个同步锁
	**一个线程取得同步锁后,那在什么时候才会被释放掉呢
	1.同步方法或代码块正常结束
	2.使用return或break终止了执行
	3.当线程执行同步方法或代码块时,程序执行了同步锁对象wait()方法
	好了,接下来的死锁等概念以后i再继续深入。。。。。
	详细见链接  https://blog.csdn.net/lonelyroamer/article/details/795609
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值