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接口就可以使用多线程编程了。
java线程与并发(一)的更多相关文章
- Java线程的并发工具类
Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...
- java线程高并发编程
java线程具体解释及高并发编程庖丁解牛 线程概述: 祖宗: 说起java高并发编程,就不得不提起一位老先生Doug Lea,这位老先生可不得了.看看百度百科对他的评价,一点也不为过: 假设IT的历史 ...
- java 线程安全并发Queue
并发Queue 在并发的队列上jdk提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论在那种都继承自Qu ...
- java线程与并发(二)
一般而言,线程通常有以下的这么几个状态: 创建状态:准备好了一个多线程操作对象 就绪状态:调用了start()方法,等待CPU调度 运行状态:执行run()方法,正在运行 阻塞状态:暂时停止执行,把资 ...
- Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类
1.线程范围内共享变量 1.1 前奏: 使用一个Map来实现线程范围内共享变量 public class ThreadScopeShareData { static Map<Thread, In ...
- Java线程新特征——Java并发库
一.线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...
- Java线程:概念与原理
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- java线程详解
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- java 线程学习
转载:详见处http://lavasoft.blog.51cto.com/62575/27069 Java多线程编程总结 下面是Java线程系列博文的一个编目: Java线程:概念与原理 ...
随机推荐
- Httpoxy远程代理感染漏洞 [转]
Httpoxy是一个最新曝出的一个CGI程序漏洞,它主要可能威胁到运行在CGI上的PHP,Go,Python和其他代码程序语言. 0×01 什么是httpoxy? 具体来说, httpoxy是一组影 ...
- 01-Swift 介绍
简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 几家欢喜,几家愁 愁者:只学Object-C的人 欢喜者: ...
- Java Web2
JavaBean组件. 定义方法:(假设有一个JavaBean的类名为CounterBean,它有一个count属性.) //在JSP文件中分别定义4种范围内的JavaBean对象的语法 //in p ...
- Scatterplots 散点图
Simple Scatterplot # Simple Scatterplot attach(mtcars)plot(wt, mpg, main="Scatterplot Example&q ...
- 删除所选项(附加搜索部分的jquery)
1.视图端(views)的配置为: <script> $(document).ready(function() { $("#info-grid").kendoGrid( ...
- 确定比赛名次---HDU1285(拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来 分析: 本来我是用普通方法写的,然后就一直wa, ...
- 1293. 3n+1数链问题 2016 12 23
/* 1293. 3n+1数链问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 在计算机科学上,有很多类问题是无法解 ...
- configure: error: no acceptable C compiler found in $PAT 的解决方案
configure: error: no acceptable C compiler found in $PATH See `config.log' for more details.你的机器里没有安 ...
- C语言小练习三
题目要求: 定义一个二维数组保存 10个学生的5门课成绩,分别用函数实现:(1)input():输入每个学生的成绩:(2)output():输出每个学生的成绩:(3)aver_stu():计算并输出每 ...
- 移动端H5页面的最佳终端适配之Flexible
lib-flexible是什么? lib-flexible是一个制作H5适配的开源库,可以点击这里下载相关文件,获取需要的JavaScript和CSS文件. 当然你可以直接使用阿里CDN: <s ...