スレッドをタイムスケジュールで終了させるプログラム


制御が出来ません。何がいけないのですか？

[code]

    package com.company;
    
    
    import java.io.*;
    import java.util.*;
    import java.util.concurrent.TimeUnit;
    
    
    public class Main  {
        static boolean b = true;
        static Thread stdRun  = null;
        public static void main(String[] args)  {
    
            Runnable inputStreamThread = new Runnable(){
                public void run(){
    
                    while(b){
                        try{
                            //System.out.println("Thread stdRun start");
                            TimerTask task = new TimerTask() {
                                public void run() {
                                    b=false;
                                }
                            };
                            Timer timer = new java.util.Timer();
                            timer.schedule(task, TimeUnit.SECONDS.toMillis(1));
                            while(true){
                                System.out.println("テスト");
                                Thread.sleep(200);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        b=false;
                    }
    
                }
    
            };
    
            stdRun = new Thread(inputStreamThread);
                /* スレッドを開始します。 */
            stdRun.start();
    
                /* スレッドが終了するのを待機 */
            try {
                stdRun.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            System.out.println("スレッドは正常に終了");
    
        }
    }
    
[/code]




もう少しやりたいことを明確にしていただけると助かるのですが、こういうことでしょうか?

[code]

    import java.io.*;
    import java.util.*;
    import java.util.concurrent.TimeUnit;
    
    public class test {
        static boolean b = true;
        static Thread stdRun  = null;
        public static void main(String[] args)  {
    
            Runnable inputStreamThread = new Runnable(){
                public void run(){
    
                    try{
                        //System.out.println("Thread stdRun start");
                        TimerTask task = new TimerTask() {
                            public void run() {
                                System.out.println("run");
                                stdRun.interrupt();
                            }
                        };
                        Timer timer = new java.util.Timer();
                        timer.schedule(task, TimeUnit.SECONDS.toMillis(1));
    
                        while (true) {
                            System.out.println("テスト");
                            Thread.sleep(200);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
            };
    
            stdRun = new Thread(inputStreamThread);
                /* スレッドを開始します。 */
            stdRun.start();
    
                /* スレッドが終了するのを待機 */
            try {
                stdRun.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            System.out.println("スレッドは正常に終了");
    
        }
    }
    
[/code]

