import java.util.Random; /** * Simulates downloading a single chunk of a file. * *

This class is intentionally provided as a skeleton for students. * The main multithreading and simulation logic should be completed * in the run() method.

*/ public class DownloadWorker implements Runnable { private final ChunkStatus chunkStatus; private final DownloadConfig config; private final Random random; public DownloadWorker(ChunkStatus chunkStatus, DownloadConfig config) { this.chunkStatus = chunkStatus; this.config = config; this.random = new Random(); } @Override public void run() { // TODO: Record the chunk start time in chunkStatus. double downloaded = 0.0; // TODO: Print a message that this chunk has started downloading. while (downloaded < chunkStatus.getChunkSizeMB()) { // TODO: Generate a random sleep delay between min and max delay. // TODO: Sleep for that delay. // TODO: Generate a random download amount for this step. // TODO: Increase downloaded, but do not go beyond chunk size. // TODO: Save the updated downloaded value into chunkStatus. // TODO: Optionally print step-by-step progress. } // TODO: Mark the chunk as completed. // TODO: Record the chunk end time in chunkStatus. // TODO: Print a message that this chunk has finished downloading. } }