- 浏览: 435081 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
weiwu83:
为什么我在手机内访问127.0.0.1访问不了呀
NanoHttpd 构建android 手机端的HttpServer -
jiae:
为啥我的插入语句乱码? 但是可以插入数据库 然后复制你 ...
SQLite3 在应用启动时初始化数据 -
lichenxiao77:
...
android 连接远程数据库 -
林源滔:
为什么我make clobber之后第一次执行make 可以。 ...
No rule to make target `out/target/common/obj/JAVA_LIBRARIES/bouncycastle_in -
cn23snyga:
new String(str.getBytes("I ...
android 平台上SQLite3中文乱码 --我的小bug
1.两种方式实现多线程
一种是继承Thread类,一种是实现Runnable接口;
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限
class MyThread extends Thread{ private String name; public MyThread(String name) { super(); this.name = name; } public void run(){ for(int i=0;i<10;i++){ System.out.println("线程开始:"+this.name+",i="+i); } } } public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.run(); mt2.run(); } }
此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过 JVM找到run()方法。
start()方法启动线程:
public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.start(); mt2.start(); } };
Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
class MyThread implements Runnable{ private String name; public MyThread(String name) { this.name = name; } public void run(){ for(int i=0;i<100;i++){ System.out.println("线程开始:"+this.name+",i="+i); } } };
但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)
此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):
public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); new Thread(mt1).start(); new Thread(mt2).start(); } }
两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享
来源:http://xuyuanshuaaa.iteye.com/blog/1109498 谢谢作者
2.一些多线程的例子
A 1 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…
由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。
线程同步有两种基本方法:
(1) synchronized
(2) wait,notify,notifyAll
现在分别采用这两种方法来解答这道题目。
/**
*/
/**
*采用多线程技术打印10次“ABC”,即“ABCABC...”
* 实现方式(一)利用synchronized关键字实现
*/
public class XunleiInterviewMultithread { public static void main(String[] args) { XunleiLock lock = new XunleiLock(); new Thread(new XunleiPrinter("A", lock)).start(); new Thread(new XunleiPrinter("B", lock)).start(); new Thread(new XunleiPrinter("C", lock)).start(); } } class XunleiPrinter implements Runnable { private String name = ""; private XunleiLock lock = null; private int count = 10; public XunleiPrinter(String name, XunleiLock lock) { this.name = name; this.lock = lock; } @Override public void run() { while (count > 0) { synchronized (lock) { if (lock.getName().equalsIgnoreCase(this.name)) { System.out.print(name); count--; if (this.name.equals("A")) { lock.setName("B"); } else if (this.name.equals("B")) { lock.setName("C"); } else if (this.name.equals("C")) { lock.setName("A"); } } } } } } class XunleiLock { public String name = "A"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
方法(二)线程类修改如下,其他类一样:
class XunleiPrinter2 implements Runnable {
private String name = "";
private XunleiLock lock = null;
private int count=10;
public XunleiPrinter2(String name, XunleiLock lock) {
this.name = name;
this.lock = lock;
}
@Override
public void run() {
while(count>0) {
synchronized (lock) {
while(!lock.getName().equalsIgnoreCase(this.name)) {
try{
lock.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.print(name);
count--;
if (this.name.equals("A")) {
lock.setName("B");
} elseif (this.name.equals("B")) {
lock.setName("C");
} elseif (this.name.equals("C")) {
lock.setName("A");
}
lock.notifyAll();
}
}
}
}
来源:http://www.blogjava.net/hankchen
发表评论
-
ubuntu 下 node.js 的使用
2016-05-11 09:35 5781 添加node.js命令 从官网 https://no ... -
android getprop() 和 java System.getPropety()
2015-06-04 14:39 63421 System.getPropety()是java中的方 ... -
工作中遇到的java基础知识点
2015-02-03 10:41 6171& 例子:(flags & 1) != ... -
反射的使用
2015-01-09 17:26 698调用hidden方法 Method ... -
java 常用查找算法
2013-09-24 11:37 26361 二分查找/折半查找 ... -
给自己看--软件设计师
2015-05-15 16:56 724国有很多小朋 ... -
java 代码中的一些优化点
2013-03-25 18:08 981仅为备忘只用: 1、别 ... -
观察者模式 Observer
2013-02-18 09:42 0观察者模式及在mms中的应用 概念 Observer ... -
No rule to make target `out/target/common/obj/JAVA_LIBRARIES/bouncycastle_in
2013-01-31 10:19 15776在android4.0源码中,mm编译apk时出现下面的错 ... -
SQLite --函数
2012-09-03 18:22 1973一、日期和时间函数:原文地址SQLite主要支持以下 ... -
java日期格式化 yyyy.MM.dd 和yyyy.MM.DD这里的DD和dd的区别
2012-08-24 14:09 2628字母 日期或时间元素 表示 示例 G Era 标志符 ... -
OTA 文档地址 及开发
2012-07-06 13:18 1725[OTA]制作OTA短信来配置手机与服务器同步 ... -
eclipse的默认代码风格
2015-05-15 16:57 1197由于eclipse的默认代码风格很不实用,本文针对性的给出一些 ... -
java基础之向上转型
2012-01-16 18:35 1046在android 源码中,很多地方都用到了向上转型。 例如: ... -
数据结构中的前序后序中序遍历
2011-11-28 09:27 4366前一阵去面试,考了一道二叉树的后序遍历,就知 ... -
java 高级排序
2011-11-02 14:07 01.希尔排序 基本思想:先将待排序序列分成若干组分别进行直 ... -
java 常用排序算法,简单排序
2011-11-01 16:06 12351.冒泡排序 基本思路是:搜索整个值列,比较相邻 ... -
mars 老师的mp3播放器
2011-08-31 18:09 1673照着视频上写到34集。 其中遇到问题 ... -
Android模拟器 安装与删除程序
2011-08-31 17:49 1340一、删除应用程序 在PC机上做Android开发的时候有3 ... -
安装sdk时报错 Failed to rename
2011-06-13 16:06 1751按提示关掉了杀毒软件和explorer,但仍不解决 ...
相关推荐
Java的线程工具易于使用,并且像Java中的其他东西一样可以在不同的平台之间移植。这是一件好事,因为如果没有线程,那么除了最简单的applet之外,几乎不可能编写出任何程序。如果你想使用Java,就必须学习线程。 ...
Java多线程基础知识 Java多线程基础知识是Java编程语言中的一项重要技术,用于提高程序的执行效率和响应速度。在这里,我们将详细介绍Java多线程基础知识的相关概念和技术。 一、程序、进程和线程 程序(Program...
关于java多线程的东西,里面有生产者与消费者的案例,感兴趣的朋友看一下吧。
一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename...
要认识多线程就要从操作系统的原理说起。以前古老的DOS操作系统(V6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率,采用批处理来...
java多线程的非常好的学习资料,里面有适合初学者的资料,也有帮助高手提高水平的资料,还是蛮全面的,感觉学了这些东西,java多线程方面的技术也就差不多了。 里面包括一个很不错的例子程序,而且有详细注释。资料...
看了一下,是很久以前的资料,不过多线程向来是很经典的东西
JAVA多线程,并设置优先级案例,一段完整的程序,加上自己的东西就可以跑起来
主要实现了,多个线程任务在同时执行的情况下,保证线程任务顺序的问题。更通俗来说,就是保证Thread1一定在thread2,thread3之后才能执行。另外,代码里我写了详细的注释,和测试的效果,绝对让你能看懂。还有我传的...
在Java中,多线程的特性使得程序能够并行执行不同的任务,从而提升效率。 1. **进程与线程的区别** - **粒度不同**:进程是资源分配的基本单位,而线程是CPU调度的基本单位。 - **内存地址空间**:每个进程拥有...
一些概念的东西,没啥价值。有个总体感觉就好
基于JAVA的多线程实现方法-继承Thread类,将需要实现多线程的类声明为继承Thread类,覆盖其run()方法,并将线程体放在该方法里。
基于JAVA的多线程实现方法-实现Runnable接口 将需要实现多线程的类声明为实现Runnable接口的类,实现run()方法,并将线程体放在该方法里。
在多线程环境中,main方法通常用于启动新的线程或者控制程序的流程。 最后,JDBC(Java Database Connectivity)是Java连接数据库的标准API,它提供了统一的方式来访问各种数据库。JDBC文档会详细解释如何建立...
Java提供了线程和同步机制,学习多线程编程,理解锁、同步块、线程池等概念,对提升程序性能至关重要。 最后,深入学习一些高级话题,如反射、动态代理、注解和泛型。这些特性让Java更加灵活和强大,也常用于框架...
6. **编程实现**:在Java、C++、Python等编程语言中,都提供了支持多线程的库或原生支持。例如,Java的Thread类和Runnable接口,C++的std::thread,Python的threading模块,它们提供了创建、控制和同步线程的API。 ...
"龟兔赛跑——Java程序设计课程多线程部分教学设计.pdf" 在 Java 程序设计课程中,多线程是一个重要且抽象的知识点。为了使学生更好地掌握多线程的概念,本文提出将龟兔赛跑的例子引入教学中。通过龟兔赛跑的例子,...
- `StringBuffer`是可变的,允许在已有字符串上添加、删除字符,适合在多线程环境中进行字符串构建。 4. **异常处理**: - 异常是程序运行时的不正常情况。Java中的异常分为运行时异常(如`NullPointerException`...