zoukankan      html  css  js  c++  java
  • 多线程

    最近琢磨了一下多线程,把整理的东西与大家分享一下吧~ 

    创建线程共有两种方式,如下

    方法一:

    public class PrimeThread extends Thread {

        long minPrime;

        PrimeThread(long minPrime) {

            this.minPrime = minPrime;

        }

        public void run() {

            //写需要多线程执行的代码

        }

    }

    new PrimeThread(143).start();

    方法二:

    public class PrimeRun implements Runnable {

        long minPrime;

        PrimeRun(long minPrime) {

            this.minPrime = minPrime;

        }

        public void run() {

            //需要多线程执行的代码

        }

    }

    new Thread(new PrimeRun(143)).start();

    死锁情况: 两个线程执行下一步都需要对方持有的锁

    public class SynTest implements Runnable{

        public boolean flag;

        @Override

        public void run() {

           while(true){

               if (flag) {

                  synchronized(Object.class){

                      System.out.println("if true 1 = "+this);

                      try {

                         Thread.sleep(10);

                      } catch (InterruptedException e) {

                      }

                      synchronized(SynTest.class){

                         System.out.println("if true 2 = ");

                      }

                  }

               }

               else{

                  synchronized(SynTest.class){

                      System.out.println("if false 1 = "+SynTest.class);

                      try {

                         Thread.sleep(10);

                      } catch (InterruptedException e) {

                      }

                      synchronized (Object.class) {

                         System.out.println("if false 2 = ");

                      }

                  }

               }

           }     

        }  

    }

    线程状态:

    重点介绍:

        1. synchronized修饰的方法持有的锁是this,synchronized修饰的静态方法用的锁是本类名称.class

        2. 线程优先级1—10,数字越大,优先级越高

        3. wait()方法冻结线程并释放锁,sleep()方法冻结线程但不释放锁

        4. JDK1.5以后出现了Lock接口,可以替代synchronized关键字,并且用Condition接口将wait(),notify(),notifyAll()方法封装成对象,一个Lock上可以挂多个Condition,这样解决了notifyAll()方法每次都唤醒所有锁上线程的问题,可以选择性的唤醒需要唤醒的线程

  • 相关阅读:
    vs编译在win xp电脑上运行的win32程序遇到的问题记录(无法定位程序输入点GetTickCount64于动态链接库KERNEL32.dll)
    (转载)用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序“
    记录编译方面的问题(重定义)
    记录一个问题:win32程序release版本和debug版本运行效果不同
    C++复制、压缩文件夹
    foreach 和 list.foreach 初步测试
    转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789
    WindowsApi 解压缩文件
    23种简洁好看的扁平化模板
    Session为null 问题
  • 原文地址:https://www.cnblogs.com/talkice/p/3352799.html
Copyright © 2011-2022 走看看