Java 为什么我的代码在主线程上运行?
我在onCreate方法中使用以下代码:Java 为什么我的代码在主线程上运行?,java,android,multithreading,Java,Android,Multithreading,我在onCreate方法中使用以下代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(9002);
Socket s = serverSocket.accept();
DataOutputStream outputStream = new DataOutputStream(
s.getOutputStream());
BufferedReader inputStream = new BufferedReader(
new InputStreamReader(s.getInputStream()));
outputStream.write("Howdy! newbie".getBytes());
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread.run();
}
});
}
它给了我一个NetworkMainThread异常
当我使用以下行删除限制时,它确实起作用:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
但我为什么要用它呢
我使用了线程,为什么它不在分离的线程上运行,而在UI线程上运行 变化
thread.run();
到
差异:
Thread.run()不会生成新线程,而Thread.start()
是否,即Thread.run
实际运行在与
调用程序Thread.start()
创建一个新线程,任务将在该线程上执行
他跑了
有关更多信息,请参见,因为您没有要求线程启动 替换:
thread.run();
与
调用run()
只需在当前线程上执行提供的Runnable
。但是,start()
将在新线程上产生执行。从thread.run()
更改为thread.start()
hahaaaaaaaaaaaa:)))Tnx:))@MTP1376你应该选择这家伙的答案,因为它能更好地解释发生了什么:。start()是Java库提供的启动线程的方法。run()是您提供的(名称悲惨)方法,它告诉线程要做什么。谢谢!这是一个巨大的错误@MTP1376乐于帮助,别忘了接受,反正喜欢编码。
thread.run();
thread.start();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(9002);
Socket s = serverSocket.accept();
DataOutputStream outputStream = new DataOutputStream(
s.getOutputStream());
BufferedReader inputStream = new BufferedReader(
new InputStreamReader(s.getInputStream()));
outputStream.write("Howdy! newbie".getBytes());
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread.start();
}
});
}