- 浏览: 506159 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (449)
- java细节 (186)
- javascript (6)
- tomcat (2)
- java基础 (17)
- extjs (1)
- java 开源 (17)
- java-bug (5)
- 电脑软件 (16)
- oracle-dba (8)
- oracle (6)
- java 精神 (17)
- SSH (6)
- 常用开源 (29)
- Mysql (22)
- 电脑学习 (8)
- jsp (12)
- html5 (6)
- hadoop (3)
- webos (2)
- web前端开发 (7)
- java实践 (2)
- 其它 (19)
- python (4)
- c++ (1)
- linux (2)
- css3+h5 (9)
- bootstrap (12)
- ps (1)
- vue (5)
- android (3)
最新评论
-
springdata_springmvc:
java inputstream demo教程源代码下载:ht ...
文件的读写 -- java FileInputStream -
hukaimiao:
[/c佛挡[size=x-small][color=darkr ...
文件的读写 -- java FileInputStream -
wwm4851186:
可惜这是中国
10大技能 让你坐享10万美元薪酬 -
zhubo357087527:
楼主,这样写可以吗?用“Process proc = Runt ...
在java中如何调用linux的ctrl+c指令?
一 前面一种比较简洁。后面一种更灵活,因为java可以实现多个接口,但是只能继承一个类
二 适合于资源的共享
如果不涉及 多线程直接资源共享用Thread 比较好,否则实现Runable较好
Thread其实也是实现了Runnable接口 Thread中的start()方法的定i,可以发现此方法中使用了private native void start0()
一种是继承Thread 这种类可以直接调用运行 见:ExtendThread
ExtendThread extends Thread
ExtendThread.start()
实现Runable 见:RunnableThread
RunnableThread et=new RunnableThread("yang");
Thread th=new Thread(et);
th.start();
ExtendThread
package thread.test;
//
public class ExtendThread extends Thread {
private String name;
public ExtendThread(String name ){
this.name=name;
}
public static void main(String[] args) {
ExtendThread et=new ExtendThread("yang");
ExtendThread et2=new ExtendThread("ll");
et.start();
et2.start();
int i=0;
while(i++<100)
{
System.out.println("线程活着没"+et.isAlive());
}
}
public void run(){
for(int i = 0;i<10 ;i++){
System.out.println("运行的线程为:"+this.name);
}
System.out.println("我结束了哦");
}
}
package thread.test;
public class RunnableThread implements Runnable {
private String name;
public RunnableThread(String name) {
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
System.out.println("运行的线程为:" + this.name);
}
System.out.println("我结束了哦");
}
public static void main(String[] args) {
RunnableThread et=new RunnableThread("yang");
RunnableThread et2=new RunnableThread("ll");
//分配新的Thread对象
Thread th=new Thread(et);
Thread th2=new Thread(et2);
th.start();
th2.start();
int i = 0;
// while (i++ < 100) {
// System.out.println("线程活着没" + th.isAlive());
//
// }
}
}
资源共享的例子:
要加上synchronized 进行锁定,否则有多余数据出现
package thread.test;
//本例子用于演示如何共享
public class RunableThread2 implements Runnable {
private Integer ticket=1000;
private String name;
public RunableThread2(String name ){
this.name=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
synchronized(this){
while (ticket>0) {
System.out.println("运行的线程为:" + this.name+"票:"+(ticket--));
}
}
}
/**
* @param args
* @CreateDate:2014-3-3
* @author yangll
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
RunableThread2 et=new RunableThread2("yang");
Thread th=new Thread(et);
Thread th2=new Thread(et);
th.start();
th2.start();
}
}
二 适合于资源的共享
如果不涉及 多线程直接资源共享用Thread 比较好,否则实现Runable较好
Thread其实也是实现了Runnable接口 Thread中的start()方法的定i,可以发现此方法中使用了private native void start0()
一种是继承Thread 这种类可以直接调用运行 见:ExtendThread
ExtendThread extends Thread
ExtendThread.start()
实现Runable 见:RunnableThread
RunnableThread et=new RunnableThread("yang");
Thread th=new Thread(et);
th.start();
ExtendThread
package thread.test;
//
public class ExtendThread extends Thread {
private String name;
public ExtendThread(String name ){
this.name=name;
}
public static void main(String[] args) {
ExtendThread et=new ExtendThread("yang");
ExtendThread et2=new ExtendThread("ll");
et.start();
et2.start();
int i=0;
while(i++<100)
{
System.out.println("线程活着没"+et.isAlive());
}
}
public void run(){
for(int i = 0;i<10 ;i++){
System.out.println("运行的线程为:"+this.name);
}
System.out.println("我结束了哦");
}
}
package thread.test;
public class RunnableThread implements Runnable {
private String name;
public RunnableThread(String name) {
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
System.out.println("运行的线程为:" + this.name);
}
System.out.println("我结束了哦");
}
public static void main(String[] args) {
RunnableThread et=new RunnableThread("yang");
RunnableThread et2=new RunnableThread("ll");
//分配新的Thread对象
Thread th=new Thread(et);
Thread th2=new Thread(et2);
th.start();
th2.start();
int i = 0;
// while (i++ < 100) {
// System.out.println("线程活着没" + th.isAlive());
//
// }
}
}
资源共享的例子:
要加上synchronized 进行锁定,否则有多余数据出现
package thread.test;
//本例子用于演示如何共享
public class RunableThread2 implements Runnable {
private Integer ticket=1000;
private String name;
public RunableThread2(String name ){
this.name=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
synchronized(this){
while (ticket>0) {
System.out.println("运行的线程为:" + this.name+"票:"+(ticket--));
}
}
}
/**
* @param args
* @CreateDate:2014-3-3
* @author yangll
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
RunableThread2 et=new RunableThread2("yang");
Thread th=new Thread(et);
Thread th2=new Thread(et);
th.start();
th2.start();
}
}
发表评论
-
idea 设置自动编译
2023-06-13 09:39 519https://www.cnblogs.com/bxzmd/p ... -
eclipse 下载的地方
2023-05-31 00:43 284参考 https://baijiahao.baidu.com/ ... -
eclipse导入 idea
2023-03-19 21:27 343转: https://blog.csdn.net/qq_526 ... -
@DataSource切换数据库失效
2022-08-08 11:31 875在实现类中 再次注入即可 public class Face ... -
jar下载地址
2022-02-11 23:34 3781、进入官网:https://sourceforge.net/ ... -
java 测试两个月前的今天-改为保留60天-bug
2021-08-18 14:03 598比如今天是8.31 两个月前是 6.30。 但是存在问题,比如 ... -
idea 常见配置
2021-06-07 17:11 3801 sst 8.37 checkstyle 版本 2 设置c ... -
linux定时清理日志
2020-09-21 13:36 497clearlog.sh #!/bin/bash # 清理30 ... -
前端中文传到后台乱码
2020-09-10 23:35 680info = new String(info.getBytes ... -
linux 开机自启动
2020-09-07 10:20 453run.sh 文件内容如下: #!/bin/bash cd ... -
nodejs 和npm对应关系
2020-08-07 09:45 2202https://nodejs.org/en/download/ ... -
mybatis 插入库 乱码
2020-05-10 12:25 389jdbc:mysql://127.0.0.1:3306/tes ... -
Transactional 不生效(转)
2020-04-16 12:33 398@Transactional 默认是当方法抛出RuntimeE ... -
全栈开发
2020-03-11 21:51 376全栈开发没有明确的定义,但应该指的就是前端+后端+数据库。所以 ... -
rocketmq-一个消费组对应一个订阅关系
2019-10-23 10:39 822源码分析RocketMQ同一个消费组设置不同tag,消息订阅失 ... -
rocketmq 标签过滤的方式
2019-10-21 09:16 456https://www.kunzhao.org/blog/20 ... -
json 转 对象
2019-09-30 16:48 385单个 XX a = JsonUtils.fromJson(js ... -
springboot @RequestBody 和 @RequestParam
2019-09-09 23:08 1313一 在路径中 在PathVariable后面接入“uid”就可 ... -
java.sql.SQLException: Parameter index out of range (1 > number of parameters, w
2019-08-28 22:42 647完整错误: java.sql.SQLException: Pa ... -
List 简洁赋值
2019-08-14 10:35 582List<String> name = new A ...
相关推荐
本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...
在Java中,有两种方式来创建和管理线程:通过继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当你需要一个具有自定义行为的线程时,可以创建一个新的类,该类继承自`Thread`。重写`Thread`类的`run()`...
继承 Thread 类和实现 Runnable 接口都是实现多线程的有效方法,但它们之间有着很大的区别: * 继承 Thread 类需要继承 Thread 类,并重写 run 方法,而实现 Runnable 接口需要实现 Runnable 接口,并重写 run 方法...
Thread 和 Runnable 是实现 Java 多线程的两种方式,Runnable 是接口,Thread 是类,建议使用 Runnable 实现 Java 多线程,不管如何,最终都需要通过 thread.start() 来使线程处于可运行状态。 Thread 的 start 和 ...
在Java中,有两种主要方式来创建线程:实现`Runnable`接口或者继承`Thread`类。 2. **Runnable接口**: `Runnable`接口是Java标准库中的一个核心接口,它包含一个抽象方法`run()`。当一个类实现了`Runnable`接口,...
多线程实现方式主要有四种:继承 Thread 类、实现 Runable 接口、实现 Callable 接口、通过 FutureTask 包装器。这四种方式可以满足不同的需求,例如继承 Thread 类可以实现线程的生命周期管理,而实现 Runable 接口...
Java语言中提供了多种方式来实现多线程异步执行,包括实现Runnable接口和继承Thread类两种方式。下面将对这两种方式进行详细的介绍和解析。 实现Runnable接口 实现Runnable接口是一种常见的方式来实现多线程异步...
41. **线程创建方式**:创建线程有两种方式,继承 `Thread` 类或实现 `Runnable` 接口,后者避免了多父类问题。 42. **Runable 实现**:在示例程序中,`X` 类同时继承了 `Thread` 并实现了 `Runnable`,这是合法的...
41. **线程创建**:创建线程有两种方式,一是继承 `Thread` 类,二是实现 `Runnable` 接口并实例化 `Thread`。 42. **Runable 实现**:实现 `Runnable` 接口可以避免单一继承的问题,因为 Java 不支持多重继承。 ...
C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译...