java多线程操作
进程是程序的一次动态的执行过程,它经历了从代码加载、执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
多线程是实现并发机制的一种有效的手段。进程和线程一样,都是实现并发的一个基本单位。
如果现在同时运行多个任务,则所有的系统资源将是共享的,补所有线程所公用,但是程序处理需要CPU,传统的单核CPU来说 ,在同一个时间段上会有多个程序执行,但是在同一个时间点上只能存在一个程序运行,也就是说,所有的程序都要抢占CPU资源。
但是现在的CPU已经发展到多核状态了,在一个电脑上可能会存在多个CPU,那么这个时候就可以非常清楚的发现多线程操作间是如何并发执行的,那么本机的CPU是双核的。
JAVA的多线程实现
两种方式实现多线程:
1)继承Thread类
2)实现Runnable接口
继承Thread类
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类之中,必须明确的复写Thread类中的run()方法,此方法为线程的主体。
class 类名称 extends Thread{
属性...;
方法...;
//复写Thread类中的run()方法,此方法为线程主体
public void run(){
线程主体;
}
}
java.lang 包含在程序运行时自动导入,所以无需手工编写import语句。
一个类继承了Thread类之后,那么此类就具备了多线程的操作功能。
class Mythread1 extends Thread{
private String name;
public Mythread1(String name){
this.name=name;
}
public void run(){
for(int i=0; i<10;i++){
System.out.println(name + "运行,i="+i);
}
}
}
启动线程必须使用Thread类中定义的start()方法,一旦调用start()方法,实际最终调用的是run()方法。
class Mythread1 extends Thread{
private String name;
public Mythread1(String name){
this.name=name;
}
public void run(){
for(int i=0; i<10;i++){
System.out.println(name + "运行,i="+i);
}
}
}
public class Mythread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mythread1 mt1=new Mythread1("线程A");
Mythread1 mt2=new Mythread1("线程B");
mt1.start();
mt2.start();
}
}

同一个对象多次调用start()方法,会抛出:IllegalThreadStateException - 如果线程已经启动。
实现Runnable接口
class Mythread1 implements Runnable {
private String name;
public Mythread1(String name){
this.name=name;
}
public void run(){
for(int i=0; i<10;i++){
System.out.println(name + "运行,i="+i);
}
}
}
public class MyThread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mythread1 mt1=new Mythread1("线程A");
new Thread(mt1).start();
}
}
两种实现方式的区别
对于Thread类和Runnable接口本身都是可以进行多线程的实现,那么两都到底使用区别。
1)继承局限:使用Runnable接口可以避免单继承的局限,而Thread类有此局限。
2)资源共享:使用Runnable接口可以实现多线程资源的共享,而Thread类却无法实现。
Thread 类定义 :public class Thread extends Object implements Runnable
发现Thread类实际上是Runnable的子类。而且Thread类也要去接收Runnable其他子类对象,而且所有的线程中,通过Runnable接口实现的线程类里面都是编写的具体功能,而并没有所谓的CPU调度,而真正意义的CPU调度由操作系统完成(通过Thread类的start()方法调用的)。
Thread类要去协调操作系统,并且最终还要执行具体的纯种主体的方法,而线程的主体呢,现在只专著于具体的功能实现,至于如何调度根本不管。
java多线程操作的更多相关文章
- Java多线程操作同一个对象,线程不安全
Java多线程操作同一个对象 发现问题:多个线程操作同一资源的情况下,线程不安全,数据紊乱 代码: package multithreading; // Java多线程操作同一个对象 // 买火车票的 ...
- java 多线程操作List,已经做了同步synchronized,还会有ConcurrentModificationException,知道为什么吗?
如题,最近项目里有个模块我做了异步处理方面的事情,在code过程中发现一个颠覆我对synchronized这个关键字和用法的地方,请问各位java开发者们是否对此有一个合理的解释,不多说,我直接贴出问 ...
- 【转】Java多线程操作局部变量与全局变量
原文网址:http://blog.csdn.net/undoner/article/details/12849661 在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控 ...
- Java多线程操作局部变量与全局变量
在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的"线程池",JDK为我们提供了一个很 ...
- Java多线程操作同一份资源
现在两个线程,可以操作初始值为零的一个变量,实现一个线程对该变量加1,一个线程对该变量减1,实现交替,来10轮,变量初始值为零. package com.yangyuanyuan.juc1205; i ...
- java 多线程操作(锁)
1.对象的加锁及其操作 程序中单独的并发线程对同一对象进行操作的代码段,成为临界区.java语言中的临界区可以是一个语句块 或者方法,使用关键字synchronized进行标识. 对象锁:java平台 ...
- java 多线程12 : 无锁 实现CAS原子性操作----原子类
由于java 多线程11:volatile关键字该文讲道可以使用不带锁的情况也就是无锁使变量变成可见,这里就理解下如何在无锁的情况对线程变量进行CAS原子性及可见性操作 我们知道,在并发的环境下,要实 ...
- Java多线程对同一个对象进行操作
示例: 三个窗口同时出售20张票. 程序分析: 1.票数要使用一个静态的值. 2.为保证不会出现卖出同一张票,要使用同步锁. 3.设计思路:创建一个站台类Station,继承THread,重写run方 ...
- java多线程的操作
上篇博客简单了介绍了Java的多线程的概念,与进程的区别,两种创建方式,状态及获取线程名称等内容.这篇文章接着介绍Java的多线程.主要从一下几方面介绍. 1 线程类的常用方法 1.1 start() ...
随机推荐
- 解决ubuntu eclipse中 Android SDK Manager 图标不见的方法
在eclipse中选择的步骤如下: Window ---> Custom Perspective --> command Group Availability ----> an ...
- Apache:如何访问共享目录
环境说明:Apache的版本是2.4.10,共享目录有两种情况,一种是windows server的目录共享,还有一种是linux的NAS.无论访问哪一种共享目录,都需要用户名和密码. 问题说明:如何 ...
- Dubbo学习之简单环境搭建
Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...
- Unity中关于作用力方式ForceMode的功能注解
功能注解:ForceMode为枚举类型,用来控制力的作用方式,有4个枚举成员,在以下举例中均设刚体质量为m=2.0f,力向量为f=(10.0f,0.0f,0.0f). (1)ForceMode.For ...
- TCP/IP协议(二)tcp/ip基础知识
今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...
- C++ 使用ifstream读取数据,多读最后一行问题解决方法
C++文件读取时有一个bug,就是使用eof()判断文件结尾并不准确,最后一行会重复读取一次,可采用以下方法避免重复读取: while (!inFile.eof()) { inFile >> ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- HFSS仿真小例
微带拐角对比实验 微带四分之波长变换器插入前后对比 P1 P2 分配波端口激励,设置差分信号线 微带线差分对的差模阻抗随着差分线间距的增大而增大,随着线宽的增大而减小: 共模阻抗随着差分线间距的增大而 ...
- canvas钟表
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ASP.NET WEB API 帮助文档引用单独项目中的DTO,见面上不显示字段注释问题解决办法
StackOverFlow上的解决办法: 问题地址