基础线程知识

来源:互联网 发布:有哪些育儿软件 编辑:程序博客网 时间:2024/05/20 08:23

1:执行mian函数的线程
        该线程是执行main中的函数
2:负责垃圾回收的线程

Object 中 finalize()
        垃圾回收器调用此方法;

System(系统类)
        运行gc()方法(运行gc回收器)

System.gc();


jvm结束,它会强制清楚它所占的内存。

主线程结束,如果其它线程没有结束。(所以有可能jvm不会立即结束)

垃圾回收的判断方法:
    0.不会立即进行垃圾回收;
    1.判断堆内存的占用率;
    2.gc()调用不会立即执行



进程是由操作系统创建的,进而创建线程;


Thread 
        start()开启线程,调用方法;

权限问题:
    

synchronized 修饰的代码块,可以使代码块中的代码不会同时被多个线程执行;


静态的同步函数使用的锁是 该函数所属字节码文件对象
可以用getClass方法获取,也可以用当前 类名.class对象


死锁:同步的嵌套
附代码:
public class DeathLockDemo implements Runnable{
 private int num = 100;
 Object object = new Object();
 boolean flag = true;
 
 @Override
 public void run() {
  if(flag){
   while(true){
    synchronized(DeathLockDemo.class){
     show();
    }
   }
  }else{
   while(true)
   this.show();
  }
  
 }
 
 public synchronized void show(){
   synchronized (DeathLockDemo.class){
    if(num>0){
     try {
      Thread.sleep(10);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     System.out.println(Thread.currentThread().getName()+"....sale...."+num--);
    }
   }
 }
 
}
class demo{
 public static void main(String[] args){
  DeathLockDemo demo = new DeathLockDemo();
  
  Thread t1 = new Thread(demo);
  Thread t2 = new Thread(demo);
  
  t1.start();
  try {
   Thread.sleep(10);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  demo.flag = false;
  t2.start();
 }
}



0 0
原创粉丝点击