有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关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接口就可以使用多线程编程了。

java线程与并发(一)的更多相关文章

  1. Java线程的并发工具类

    Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...

  2. java线程高并发编程

    java线程具体解释及高并发编程庖丁解牛 线程概述: 祖宗: 说起java高并发编程,就不得不提起一位老先生Doug Lea,这位老先生可不得了.看看百度百科对他的评价,一点也不为过: 假设IT的历史 ...

  3. java 线程安全并发Queue

    并发Queue 在并发的队列上jdk提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论在那种都继承自Qu ...

  4. java线程与并发(二)

    一般而言,线程通常有以下的这么几个状态: 创建状态:准备好了一个多线程操作对象 就绪状态:调用了start()方法,等待CPU调度 运行状态:执行run()方法,正在运行 阻塞状态:暂时停止执行,把资 ...

  5. Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类

    1.线程范围内共享变量 1.1 前奏: 使用一个Map来实现线程范围内共享变量 public class ThreadScopeShareData { static Map<Thread, In ...

  6. Java线程新特征——Java并发库

    一.线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...

  7. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  8. java线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. java 线程学习

    转载:详见处http://lavasoft.blog.51cto.com/62575/27069   Java多线程编程总结   下面是Java线程系列博文的一个编目:   Java线程:概念与原理 ...

随机推荐

  1. 在Xcode中使用Git进行源码版本控制

    http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册   iOS开发 Swift Ap ...

  2. java UDP

    UDP 与 tcp 连接的 区别 以及  两者的不同 UDp 1 面向的是无连接的网络方式 2 传输速度快 (但是容易发生丢包 ) 3 传输的数据的大小带有的限制 一般是在64k  范围内 tcp 1 ...

  3. app开发遇到问题及解决

    1:ios and Android 差异input type=text 当用户点击input框时,弹出手机键盘,ios会遮挡输入框 解决办法: pswOnFocus = function(){ tar ...

  4. Kubernetes1.5正式发布

    Kubernetes1.5正式发布 修复了很多已知问题 进一步增强federation相关特性 将PetSet改名为StatefulSet 将ScheduledJobs改名为CronJobs 新增了命 ...

  5. UWP的拖拽功能

    简单的拖拽实现: <Grid x:Name="G1" AllowDrop="True" DragEnter="G1_DragEnter" ...

  6. 编译 wxWidgets-3.0.2 on Mac OS X Yosemite 出错?!的解决方法

    tar -zxf wxWidgets-3.0.2.tar.bz2   //解压 //三部走 ./configure ./make 提示webKit出错 原因:有人偷懒,没试编译就发布了. 解决:找到. ...

  7. hadoop搭建初步总结

    1.安装JDK1.1上传运用软件FileZilla,将windows上的jdk压缩包放到linux的root目录下 1.2解压jdk #创建文件夹 mkdir /usr/java(不要挂在在" ...

  8. 表格里使用text-overflow后不能隐藏超出的文本的解决方法

          当把text-overflow设为ellipsis时文本溢出内容就能显示为省略标记,而设为clip时就能把文本溢出的部分裁切掉,不过在表格里面使用text-overflow后依旧不能隐藏超 ...

  9. HTML和XHTML的一点事儿.

    什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...

  10. 首次创建maven项目的准备工作

    需要JDK1.5以上.Eclipse.maven maven下载地址:http://maven.apache.org/download.cgi 1.配置环境变量新建系统变量M2_HOME 2.运行cm ...