Runnable Thread start a new Thread inside the same java class.

    public class MainActivity extends AppCompatActivity {
        private static final String TAG = MainActivity.class.getSimpleName();
        private Button mDownloadButton;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            mDownloadButton = (Button) findViewById(R.id.btn);
     
            mDownloadButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "Downloading", Toast.LENGTH_SHORT).show();
     
                    Runnable runnable = new Runnable() {
                        @Override
                        public void run() {
                            downloadSong();
                        }
                    };
     
                    Thread thread = new Thread(runnable);
                    thread.setName("DownloadThread");
                    thread.start();
                }
            });
        }
     
        private void downloadSong() {
            long endTime = System.currentTimeMillis() + 10*1000;  //wait 10 seconds
            while (System.currentTimeMillis() < endTime) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Log.d(TAG, "Song downloaded!");
        }
    }

OR use a normal java Thread:

    public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private Button mDownloadButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDownloadButton = (Button) findViewById(R.id.downloadButton);
    mDownloadButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Toast.makeText(MainActivity.this, "Downloading", Toast.LENGTH_SHORT).show();
    DownloadThread thread = new DownloadThread();
    thread.setName("DownloadThread");
    thread.start();
    }
    });
    }
    }
     
    ////////////////////////////////////////// ON DownloadThread Java Class //////////////////////////////////////////////////
     
    public class DownloadThread extends Thread {
    private static final String TAG = DownloadThread.class.getSimpleName();
    @Override
    public void run() {
    for (String song : Playlist.songs) {
    downloadSong();
    }
    }
    private void downloadSong() {
    long endTime = System.currentTimeMillis() + 10*1000;      //wait 10 seconds
    while (System.currentTimeMillis() < endTime) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    Log.d(TAG, "Song downloaded!");
    }
    }