在j2me联网时,在eclipse控制台下有一个警告:“若要避免潜在的死锁,应该在commandAction()处理程序之外的其他线程中执行可能会阻塞的,操作(如网络连接)。
为了避免潜在的死锁,我们经常把把联网的代码部分写到一个线程中去执行。
而实际应用中,网络连接的事务也都是使用一个单独的线程进行的。
线程的创建可以使用Runnable接口来实现,也可以使用Thread类实现,还可以以匿名内部类的方式创建。在本文中,分别用这三种方式给出了j2me联网的例子。
代码均测试通过。可以直接使用。
1.通过继承Thread类创建
/**
* 测试Thread类线程
* @author mfcai
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class OpenConn implements Runnable {
private HttpURLConnection conn;
private URL url;
// Thread thread1;
public OpenConn(String url) throws MalformedURLException {
this.url = new URL(url);
}
public void run() {
try {
conn = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
url = null;
}
}
public HttpURLConnection getConn() {
return conn;
}
public static void main(String[] args) throws Exception {
// 创建Runnable类
OpenConn openConn = new OpenConn("http://www.google.com");
// 创建线程
Thread thread = new Thread(openConn);
// openConn.thread1=thread;
thread.start();
thread.join(10000);// wait 10 seconds
HttpURLConnection c = openConn.getConn();
if (c != null) {
System.out.println("连接网络成功...");
BufferedReader r = new BufferedReader(new InputStreamReader(c
.getInputStream()));
String s = r.readLine();
while (s != null) {
System.out.println(s);
s = r.readLine();
}
} else {
System.out.println("超时错误,连接网络失败...");
}
}
}
2.通过引用Runnable接口创建
/**
* 测试Runnable接口线程
* @author mfcai
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class OpenConn2 extends Thread {
private HttpURLConnection conn;
private URL url;
public OpenConn2(String url) throws MalformedURLException {
this.url = new URL(url);
}
public void run() {
try {
conn = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
url = null;
}
}
public HttpURLConnection getConn() {
return conn;
}
public static void main(String[] args) throws Exception {
OpenConn2 openConn = new OpenConn2("http://www.google.com");
openConn.start();
openConn.join(10000);// wait 10 seconds
HttpURLConnection c = openConn.getConn();
if (c != null) {
System.out.println("连接网络成功...");
BufferedReader r = new BufferedReader(new InputStreamReader(c
.getInputStream()));
String s = r.readLine();
while (s != null) {
System.out.println(s);
s = r.readLine();
}
} else {
System.out.println("超时错误,连接网络失败...");
}
}
}
3.以匿名内部类的方式创建
即在一个方法中创建线程,当方法被调用时,线程即启动,如下:
/**
* 测试匿名线程线程创建
* @author mfcai
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class OpenConn3 {
private HttpURLConnection conn;
private URL url;
public static void main(String[] args){
try{
OpenConn3 open3= new OpenConn3();
open3.strartMyThread();
}catch(Exception ex){
System.out.println(ex.toString());
}
}
public void strartMyThread() throws Exception{
this.url =new URL("http://www.google.com");
java.lang.Runnable runner=new Runnable(){
public void run(){
try {
conn = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
url = null;
}
}
};
Thread openConn=new Thread(runner);
openConn.start();
openConn.join(10000);// wait 10 seconds
if (conn != null) {
System.out.println("连接网络成功...");
BufferedReader r = new BufferedReader(new InputStreamReader(conn
.getInputStream()));
String s = r.readLine();
while (s != null) {
System.out.println(s);
s = r.readLine();
}
} else {
System.out.println("超时错误,连接网络失败...");
}
}
}
转载请注明作者和出处。
分享到:
相关推荐
j2me 不同运营商移动,电信,联通联网方案
j2me 实现抛物线的两种方法 j2me 实现抛物线的两种方法 j2me 实现抛物线的两种方法 j2me 实现抛物线的两种方法 j2me 实现抛物线的两种方法
关于J2ME应用中一些多线程的使用方法和示例
J2ME通用进度条,解决联网、线程操作等候问题
用J2ME实现短信功能,客户端和服务器端都有
J2ME里面的线程和网络 J2ME里面的线程和网络 J2ME里面的线程和网络
J2ME API J2ME API J2ME API J2ME API J2ME API
J2ME开发 J2ME开发 J2ME开发 J2ME开发
这是我开发的J2ME实现画图程序,希望大家能互相学习交流
J2ME实现的断点续传,解决下载文件问题
j2me框架_用J2ME的通用联网框架开发联网.pdf
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
用j2me 实现打电话的一个小功能 在真机上已经测试过
A*算法(j2me实现)A算法使用j2me实现
用J2ME实现简单电子邮件发送功能 用J2ME实现简单电子邮件发送功能
J2ME三种低级用户界面事件处理技术比较
j2me手机游戏 j2me手机游戏 j2me手机游戏 j2me手机游戏 j2me手机游戏j2me手机游戏 j2me手机游戏
使用j2me平台编写的电话本小程序 实现增删改查功能
使用kxml实现的j2me浏览器, 有兴趣研究J2me及浏览器相关的朋友们可以参考下
音乐的控制,rms的操作类,java字符串解析 将字符串解析成字符数组,java进度条实例模板,j2me中将对象转换成字节数组的方法,j2me联网测试,j2me多线程的应用实例,j2me Socket通信例子 客户端,服务器端