多线程与 “锁”

多线程简介

多线程是指从软件或者硬件上实现多个线程并发执行的一种技术。它的使用场景是在CPU出现浪费的时候用的,多线程的出现极大的提高了CPU的利用率。多线程可以实现多个线程同时进行,但是实际上并不是真正的同时进行,在微小的时间段内,还是处理一个线程,只是不断切换线程。多线程的资源有的是共享资源,既是共享资源就可能会产生几个线程竞争使用一个资源,这时候就会产生相互干扰的问题了。

简单多线程代码

方法进栈中的方法都是拷贝过来的,此时的方法为栈帧(方法单位)

 

第一个方法加 . join();上一个方法执行完之后再执行下一个

 

·start()和run()方法配合使用    两个线程调用run方法和方法内的变量是拷贝的各自都有对应的run方法

public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		Tree tree=new Tree();
		tree.value=100;
		ThreadDemo t1=new ThreadDemo("2",tree);
		t1.start();
		ThreadDemo t2=new ThreadDemo("3",tree);
		t2.start();
		ThreadDemo t3=new ThreadDemo("1",tree);
		t3.start();
	
	}

extends Thread 继承Thread方法    主线程是main方法子线程是thread(另外一个程序)

public class ThreadDemo extends Thread {//extends Thread继承Thread类
	private String name ;
	private Tree tree;
	ThreadDemo(String name,Tree tree){
		this.name=name;
		this.tree=tree;
	}
	public void run() {
		StackTest bn=new StackTest();//实例化栈,要配合栈使用,单独使用会报错。
	while(tree.value>0) {
		//try{}catch这个对整个线程起作用
		 try {
			Thread.sleep(10);//休眠10微妙后执行下一个
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
		tree.jian();
		System.out.println(name+"卖了第"+tree.value+"张");
		}
	}
}

这里需要知道一种神秘的“锁”

 这种锁是java锁,它是为了让线程互不干涉,锁的是目标资源 ,是由一个版本号和标记组成的。它锁的是不在方法内部的变量(方法内部的变量是安全的)能锁住的锁必须是在同一个区域内的,锁只能给方法加锁    不能给资源加锁。

锁可以分为:1对象锁  2静态锁

对象加锁 :第一个对象锁 会对第二个非静态方法进行锁住

静态的锁(static):是相互锁(第一个方法锁住第二个方法也能锁住

静态锁(类锁)和对象锁是不能相互锁的

下面的锁是锁不住value的,因为valueb不是共享资源。

public class ThreadDemo extends Thread{
	
	private String name;
	
	private volatile Tree tree;
	
	ThreadDemo(String name, Tree tree){
		this.name = name;
		this.tree = tree;
	}
	
    public  void run() {
    	ZhanTest bn = new ZhanTest();
    	for(int i = 0; i < 10000; i++) {
    		tree.jiajia();
    	}
    	
    }
    
    //这个是锁不住value的
//    public synchronized void run() {
//    	ZhanTest bn = new ZhanTest();
//    	for(int i = 0; i < 10000; i++) {
//    		tree.value++;
//    	}
//    	
//    }
}

总结:

Java中线程的共享互斥操作,会使用synchronized(锁)关键字解决多线程中出现的问题。

  

发布了3 篇原创文章 · 获赞 2 · 访问量 40

猜你喜欢

转载自blog.csdn.net/qq_43910202/article/details/104071812
今日推荐