zoukankan      html  css  js  c++  java
  • java线程与并发(一)

      有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识。希望这次能一直坚持下去。

    想了解并发,必须要先知道一些线程的知识,所以前面几篇还是先写一点Java线程的东西。

    什么是线程?这又需要从操作系统说起了。我们在windows中打开任务管理器,就可以查看进程的数量,而一个进程就代表了一个运行的程序。

    而在一个进程中,又有很多的线程,他们分管着这个程序的各个小部分。

    所以:

      一个进程拥有多个线程

      一个线程只属于一个进程

    而在java中实现多线程有两个方式:

    一、继承Thread类

    二、实现Runnable接口

    首先看下Thread类

    Thread类在java.lang包中 ,所以不需要刻意的improt,一个类只要继承了这个类,这个类就会成为多线程操作类。

             在Thread类中一定要覆写run()方法,这个方法也是线程的主体

             在主程序中,如果希望run()当中的方法并发调用,需要调用thread类中的start()方法这个方法就是多线程调用run()方法中的代码。如果程序中同一个类多次调用start()方法可能会引发异常。

     class MyThread extends Thread{
    
             private String name;
    
             public MyThread(String name){
    
                       this.name=name;
    
             }
    
             public void run(){
    
                       for(int i=0;i<10;i++){
    
                                System.out.println(name+"线程"+i);
    
                       }
    
             }
    
    }
    
    public class MyThreadDemo{
    
             public static void main(String args[]){
    
                       MyThread m1=new MyThread("A");
    
                       MyThread m2=new MyThread("B");
    
                       m1.start();
    
                       m2.start();
    
             }
    
    }

    输出:

    A run 0
    
    B run 0
    
    A run 1
    
    B run 1
    
    A run 2
    
    B run 2
    
    A run 3
    
    B run 3
    
    A run 4
    
    B run 4
    
    A run 5
    
    B run 5
    
    A run 6
    
    B run 6
    
    A run 7
    
    B run 7
    
    A run 8
    
    B run 8
    
    A run 9
    
    B run 9

    再来看下Runnable接口

             在这个接口中只定义了一个方法

             Public void run();             

    一个类实现了Runnable 接口之后,同样也会成为一个多线程操作类

    但是在Runnable接口中没有start()方法,所以如果一个实现了Runnable类的方法如果希望实现多线程操作,需要借助于Thread类

    在thread类中有这么一个构造方法

             Public Thread(Runnable target)

    MyThread mt=new MyThread(“thread1”);
    
    Thread t1=new Thread(mt);
    
    t1.start();

    由此也可以看出这个Thread类是实现了Runnable接口的类

    使用Thread类无法达到资源共享的目的,而使用Runnable接口就可以了。

    因为我们可以让一个实现了Runnable接口的类多次被实例化为一个Thread类。

    MyThread mt=new MyThread(“thread1”);
    
    New Thread(mt).run();
    
    New Thread(mt).run();
    
    New Thread(mt).run();

    所以Runnable接口比thread类使用的次数更多一点。

    总之,在java中通过Thread类或者runnable接口就可以使用多线程编程了。

  • 相关阅读:
    hdu 4534 郑厂长系列故事——新闻净化 夜
    poj 1185 炮兵阵地 夜
    hdu 2586 How far away ? 夜
    C. Shaass and Lights 夜
    hdu 4536 XCOM Enemy Unknown 夜
    根据BAPI_PO_CREATE1创建采购订单
    301、404、200、304、500HTTP状态
    js检查Page.IsValid
    查看linq的生成语句
    uploadfile和Image实现图片预览
  • 原文地址:https://www.cnblogs.com/whthomas/p/3440028.html
Copyright © 2011-2022 走看看