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

    今天系统学习下JAVA的多线程,之前看过一些,看过也就过去了,还是尽量多记录下,好好总结下。

    多线程在较低的层次傻瓜你扩展了多任务的概念:一个程序同时执行多个任务.

    进程和线程的区别:本质上每个进程拥有自己的一整套变量,而线程则共享数据。共享变量使线程之间的通信比进程之间更有效、容易。

    在一个单独的线程中执行一个任务的简单过程:

    1),将任务代码移到实现了Runnable接口的类的run方法中,

    public interface Runnable
    {
        void run();
    }

    实现一个类:

    Class MyRunnable immplements Runnable
    {
        public void run()
        {
            //task code
        }
    }

    2),创建一个类对象

      Runnable r = new MyRunnable();

    3),由Runnable创建一个Thread对象:

       Thread t =  new Thread(r);

    4).启动线程:

      t.start();

    public class ThreadTest implements Runnable {
    
        public static void main(String[] args){
            ThreadTest t1 = new ThreadTest("thread1");
            ThreadTest t2 = new ThreadTest("thread2");
            Thread demo1 = new Thread(t1);
            Thread demo2 = new Thread(t2);
            demo1.start();
            demo2.start();
            
        }
        public ThreadTest(){}
        public ThreadTest(String name){
            this.name = name;
        }
        
        public void run()
        {
            for (int i = 0; i < 5; i++) {
                System.out.println(name + "running  " + i);
            }
        }
        
        private String name; //field
    }

    另外一种方法是继承Thread类,

    example2:

    public class ThreadTest extends Thread {
    
        public static void main(String[] args){
            ThreadTest t = new ThreadTest();
            ThreadTest t1 = new ThreadTest();
            
             t.start();
             t1.start();
        }
        public void run(){
            System.out.println(this.getName()+" Running");
        }
    }

      void interrupt() 向线程发送中断请求/

      static boolean interrupted()测试当前线程是否被中断/

      static Thread currentThread() 返回代表当前执行线程的Thread对象/

    要确定一个线程当前状态,可调用getState()方法。

      线程的状态:New、 Runnable、Blocked、Waiting、Time waiting、Terminated。

    守护线程

      t.SetDaemon(true);

    守护线程的唯一用途是为其他线程提供服务,例如计时线程。

    同步

    在大多数实际的多线程应用中,两个或两个以上的线程需要共享对同一数据的存取,同步存取。

    有两种机制防止代码块受并发访问的干扰,synchronized关键字自动提供一个锁以及相应的“条件”,对于大多数需要显式锁的情况是很便利的。

    引入ReentrantLock类。

    用ReentrantLock保护代码块的基本结构:

    myLock.lock();
    try
    {
        critical section
    }finally
    {
        myLock.unlock();
    }//这一结构确保任何时刻只有一个线程进入临界区,一旦一个线程封锁了锁对象,其他任何线程都无法通过lock语句,当其他线程调用lock时,它们blocked。

    条件对象conditional variable

    通常,线程进入临界区,发现在某一条件满足之后它才能执行。要使用一个条件对象来管理那些已经获得了一个锁,但还不能做有用工作的线程。

    newCondition();

  • 相关阅读:
    征集“微软武汉DOTNET俱乐部武汉大学樱花赏”活动内容
    2007上半年微软武汉.NET俱乐部活动预告。
    [微软新技术培训]微软新技术预览之Microsoft Office SharePoint Server 2007
    武汉.NET俱乐部武大赏樱花精彩图片
    [微软新技术培训]微软新技术预览之Visual Studio Team System
    [摘]互联网传说
    python:注释最多的冒泡排序
    《C#线程参考手册》读书笔记(一):定义线程
    【转】C# DateTime 日期计算
    详谈WPF开发中的数据虚拟化
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3435858.html
Copyright © 2011-2022 走看看