Creandolo todo desde el main seria algo parecido a lo siguiente:
 
Main:   
Código JAVA:
Ver original- public class Main { 
-   
-     /** 
-      * @param args 
-      */ 
-     public static void-  main (String[]-  args ) {
 
-         Oferta oferta = new Oferta(); 
-         oferta.start(); 
-         Subscriptor sub1 = new Subscriptor("Uno", oferta); 
-         Subscriptor sub2 = new Subscriptor("Dos", oferta); 
-         Subscriptor sub3 = new Subscriptor("Tres", oferta); 
-         Subscriptor sub4 = new Subscriptor("Cuatro", oferta); 
-         Subscriptor sub5 = new Subscriptor("Cinco", oferta); 
-         Subscriptor sub6 = new Subscriptor("Seis", oferta); 
-         Subscriptor sub7 = new Subscriptor("Siete", oferta); 
-          
-         List<Subscriptor> listaSubs = new ArrayList<Subscriptor>(); 
-         listaSubs.add(sub1); 
-         listaSubs.add(sub2); 
-         listaSubs.add(sub3); 
-         listaSubs.add(sub4); 
-         listaSubs.add(sub5); 
-         listaSubs.add(sub6); 
-         listaSubs.add(sub7); 
-          
-         for(int i=0;i<listaSubs.size();i++){ 
-             listaSubs.get(i).start(); 
-         }    
-   
-     } 
-   
- } 
Clase Subscriptor:   
Código JAVA:
Ver original- public class-  Subscriptor  extends Thread {
 
-   
-     private Oferta oferta; 
-   
-         return this.nombre; 
-     } 
-     public-  Subscriptor (String-  nombre, Oferta oferta ){
 
-         this.nombre=nombre; 
-         this.oferta=oferta; 
-     } 
-     public void run(){ 
-         int-  num  = (int)(Math- . random()*10);
 
-         try { 
-             oferta.apuntarse(this); 
-             // TODO Auto-generated catch block 
-             e.printStackTrace(); 
-         } 
-          
-     } 
-   
- } 
Clase Oferta:    
Código JAVA:
Ver original- public class-  Oferta  extends Thread{
 
-     List<Subscriptor> listaSubscriptores = new ArrayList<Subscriptor>(); 
-     public void apuntarse(Subscriptor subs){ 
-         if(listaSubscriptores.size()<5){ 
-             this.listaSubscriptores.add(subs); 
-             System- . out- . println("El subscriptor "+- subs. getNombre()+" se ha apuntado a la oferta");
 
-             } 
-     } 
-      
-   
- } 
Si hay que crear los subscriptores en el main y luego iniciarlos desde un solo hilo la cosa se complica bastante, ya que estarias trabajando con el objeto Subscriptor recursivamente y habria que pasarle el objeto oferta a cada subscriptor de la siguiente forma: 
Clase main:   
Código JAVA:
Ver original- public class Main { 
-   
-     /** 
-      * @param args 
-      */ 
-     public static void-  main (String[]-  args ) {
 
-         Oferta oferta = new Oferta(); 
-         oferta.start(); 
-          
-         Subscriptor sub1 = new Subscriptor("Uno"); 
-         Subscriptor sub2 = new Subscriptor("Dos"); 
-         Subscriptor sub3 = new Subscriptor("Tres"); 
-         Subscriptor sub4 = new Subscriptor("Cuatro"); 
-         Subscriptor sub5 = new Subscriptor("Cinco"); 
-         Subscriptor sub6 = new Subscriptor("Seis"); 
-         Subscriptor sub7 = new Subscriptor("Siete"); 
-          
-         List<Subscriptor> listaSubs = new ArrayList<Subscriptor>(); 
-         listaSubs.add(sub1); 
-         listaSubs.add(sub2); 
-         listaSubs.add(sub3); 
-         listaSubs.add(sub4); 
-         listaSubs.add(sub5); 
-         listaSubs.add(sub6); 
-         listaSubs.add(sub7); 
-          
-         Subscriptor inicial = new Subscriptor("Inicial", oferta, listaSubs); 
-         inicial.run(); 
-          
-   
-     } 
-   
- } 
Clase subscriptor:   
Código JAVA:
Ver original- public class-  Subscriptor  extends Thread {
 
-   
-     private Oferta oferta; 
-     List<Subscriptor> listaSubs; 
-   
-      
-     public Oferta getOferta() { 
-         return oferta; 
-     } 
-     public void setOferta(Oferta oferta) { 
-         this.oferta = oferta; 
-     } 
-     public void-  setNombre (String-  nombre ) {
 
-         this.nombre = nombre; 
-     } 
-         return this.nombre; 
-     } 
-      
-     public-  Subscriptor (String-  nombre ){
 
-         this.nombre=nombre; 
-     }    
-     public-  Subscriptor (String-  nombre, Oferta oferta, 
 
-             List<Subscriptor> listaSubs) { 
-         this.oferta=oferta; 
-         this.nombre=nombre;      
-         this.listaSubs=listaSubs; 
-     } 
-     public void run(){ 
-         if(listaSubs!=null){                 
-             for(int i=0;i<this.listaSubs.size();i++){ 
-                 Subscriptor s=listaSubs.get(i); 
-                 s.setOferta(this.oferta); 
-                 s.start(); 
-             } 
-         } 
-         else{ 
-             int-  num  = (int)(Math- . random()*10);
 
-             try { 
-                 oferta.apuntarse(this); 
-                 // TODO Auto-generated catch block 
-                 e.printStackTrace(); 
-             } 
-         }    
-     } 
- } 
Creo que las dos versiones estan implementadas correctamente, sino es asi, que me lo corrijan que hay gente por aqui que sabe bastante mas que yo eje. 
Un saludo y espero que te haya servido.