java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
java5 以前, 有如下两种:
第一种:
new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类的实例对象, 子类加上 run 方法后的代码如下:
new Thread(){
public void run(){
}
}.start();
第二种:
new Thread(new Runnable(){}).start();这表示调用 Thread 对象接受的 Runnable 对象的 run方法, new Runnable(){}表示一个 Runnable 的匿名子类的实例对象,runnable 的子类加上 run 方法后的代码如下:
new Thread(new Runnable(){
public void run(){
}
}
).start();
从 java5 开始, 还有如下一些线程池创建多线程的方式:
ExecutorService pool = Executors.newFixedThreadPool(3)
for(int i=0;i<10;i++){
pool.execute(new Runable(){
public void run(){
}
});
}
Executors.newCachedThreadPool().execute(new Runable(){
public void run(){
}
});
Executors.newSingleThreadExecutor().execute(new Runable(
{public void run(){
}
});
有两种实现方法, 分别使用 new Thread()和 new Thread(runnable)形式, 第一种直接调用
thread 的 run 方法, 所以, 我们往往使用 Thread 子类, 即 new SubThread()。 第二种调
用 runnable 的 run 方法。
有两种实现方法, 分别是继承 Thread 类与实现 Runnable 接口
用 synchronized 关键字修饰同步方法
反对使用 stop(), 是因为它不安全。 它会解除由线程获取的所有锁定, 而且如果对象处
于一种不连贯状态, 那么其他线程能在那种状态下检查和修改它们。 结果很难检查出
真正的问题所在。 suspend()方法容易发生死锁。 调用 suspend()的时候, 目标线程会停
下来, 但却仍然持有在这之前获得的锁定。 此时, 其他任何线程都不能访问锁定的资
源, 除非被"挂起"的线程恢复运行。 对任何线程来说, 如果它们想恢复目标线程, 同
时又试图使用任何一个锁定的资源, 就会造成死锁。 所以不应该使用 suspend(), 而应
在自己的 Thread 类中置入一个标志, 指出线程应该活动还是挂起。 若标志指出线程应
该挂起, 便用 wait()命其进入等待状态。 若标志指出线程应当恢复, 则用一个 notify()
重新启动线程
java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?的更多相关文章
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
java5 以前, 有如下两种:第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类 ...
- java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...
- Java中有两种实现多线程的方式以及两种方式之间的区别
看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...
- Java中有几种类型的流?以及常见的实现类都有哪些?
Java中有几种类型的流?以及常见的实现类都有哪些? 首先应该从两个角度来看: 从输入输出方面来讲: Java中有输入流和输出流 从流的编码方式上来讲: Java中有字节流和字符流 ...
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop(),是因为它不安全.它会解除由线程获取的所有锁定,而且如果对象处于一种不 ...
- Java中有四种常见的Map实现方法
在 HTML5 之前我们做图片预览主流做法有两种,第一种是通过 Flash 插件来做预览,第二种是 Ajax 实现的假预览,也就是说选择图片文件后,图片其实已经异步上传到服务器,服务器处理后返回图片路 ...
- Java中有多少种设计模式?请简单画一下三种常见设计模式的类图?
转载:http://blog.csdn.net/longyulu/article/details/9159589 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽 ...
- java方法中开启一个线程
很多业务场景下需要你在一个方法中去开启一个线程,去跑一些处理时间较长的代码,这样调用方就不必经过长时间的等待了.好了 话不多说 先上代码: package test; public class Th ...
- java多线程学习(两)——创建一个线程
一个.java创建两个线程的方法 1.从java.lang.Thread派生一个新类线程类,其覆盖run()方法 2.实现Runnable接口.重载Runnable接口中的run()方法. 使用Thr ...
随机推荐
- android 网络状态判断【转】
import java.net.InetAddress; import android.app.Activity;import android.content.Context;import andro ...
- ajax相关
Javascript·部分: <script language="javascript" type="text/javascript" src=" ...
- Caused by: java.lang.UnsupportedClassVersionError: com/zy/example/domain/Student : Unsupported major.minor version 51.0
JVM的版本比jdk的版本老,即JVM的版本低于jdk的版本.换个新版本的就可以解决问题.
- ecshop二次开发之购物车常见问题
1.ecshop二次开发中保存注册用户购物车数据解决方法:ecshop购物车是数据库中cart表来支持的,在ecshop表中rec_id是编号,user_id是注册用户的id,session_id表示 ...
- Linux学习之telnet命令
telnet命令通常用来远程登录,telnet程序是基于TELNET协议的远程登录客户端程序,Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式,它为用户 ...
- Highcharts使用手册
chart: { type: 'area', ignoreHiddenSeries: false, //如果true,一旦一个系列被隐藏,轴将会扩展剩余的可见系列 }, 这是设置的两个纵坐标轴: yA ...
- StormAPI简单使用
StormAPI .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",& ...
- how to install git 1.8 rpm
git版本在低于1.8之前,对于私有项目会出现401的pull失败错误,只能通过升级git版本来解决 It appears that git18 is no longer available from ...
- javascript学习笔记(2)
<html> <head><title>Throwing die</title><script> var canv_width = ...
- JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...