Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的代码在主线程上运行?_Java_Android_Multithreading - Fatal编程技术网

Java 为什么我的代码在主线程上运行?

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);

我在onCreate方法中使用以下代码:

@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();
                }
            });
        }