多线程简介
多线程是指从软件或者硬件上实现多个线程并发执行的一种技术。它的使用场景是在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(锁)关键字解决多线程中出现的问题。